![](/img/trans.png)
[英]How to combine 'variables' from multiple NetCDF files into a single NetCDF file?
[英]Extract a given variable from multiple Netcdf files and concatenate to a single file
我正在嘗試從多個 NC 文件中提取單個變量 (DUEXTTAU),然后將所有單個文件合並到一個 NC 文件中。 我正在使用 nco,但 ncks 有問題。
NC 文件名如下:
MERRA2_100.tavgM_2d_aer_Nx.YYYYMM.nc4
每個文件有 1 個(每月)時間步長,時間坐標沒有實際值,而是以單位或 begin_date 變化。 例如,在文件MERRA2_100.tavgM_2d_aer_Nx.198001.nc4
中,它具有:
int time(time=1);
:long_name = "time";
:units = "minutes since 1980-01-01 00:30:00";
:time_increment = 60000; // int
:begin_date = 19800101; // int
:begin_time = 3000; // int
:vmax = 9.9999999E14f; // float
:vmin = -9.9999999E14f; // float
:valid_range = -9.9999999E14f, 9.9999999E14f; // float
:_ChunkSizes = 1U; // uint
我對每個文件重復此步驟
ncks -v DUEXTTAU MERRA2_100.tavgM_2d_aer_Nx.YYYYMM.nc4 YYYYMM.nc4
接着
ncrcat YYYYMM.nc4 final.nc4
在final.nc4
中, time
坐標具有相同的值(第一個 YYYYMM.nc4)。 例如,將198001、198002、198003這3個文件合並后,所有時間步長的time
坐標都為198001。 我應該如何處理?
首先,這個命令應該可以工作:
ncrcat -v DUEXTTAU MERRA2_100.tavgM_2d_aer_Nx.??????.nc4 final.nc4
但是,當time
為 integer 時,最新版本的 NCO 無法正確重建或重新定位時間坐標,在您的情況下就是這樣。 該修復程序位於 GitHub 上的最新 NCO 快照中,並將在 4.9.3 中,有望在本周發布。 如果不能從源安裝,則需要手動干預(例如,使用ncap2 -s 'time=float(time)' in.nc out.nc
每個輸入文件中的time
更改為浮點)。 在任何情況下, time_increment
、 begin_date
和begin_time
屬性都是非標准的,只會從第一個文件中復制。 但是,如果您使用ncrcat
的非損壞版本,則應該正確重建time
本身。
您也可以使用 cdo 執行此操作,但您需要兩個步驟:
cdo mergetime MERRA2_100.tavgM_2d_aer_Nx.??????.nc4 merged_file.nc
cdo selvar,DUEXTTAU merged_file.nc DUEXTTAU.nc
如果開始日期都設置正確,這實際上應該有效。 問題是 merge_file.nc 實際上可能很大,因此最好先循環提取變量然后合並:
for file in `ls MERRA2_100.tavgM_2d_aer_Nx.??????.nc4`; do
cdo selvar,DUEXTTAU $file ${file#????}_duexttau.nc4
done
cdo mergetime MERRA2_100.tavgM_2d_aer_Nx.??????_duexttau.nc4 DUEXTTAU.nc
rm -f MERRA2_100.tavgM_2d_aer_Nx.??????_duexttau.nc4 # clean up
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.