簡體   English   中英

從多個 Netcdf 文件中提取給定變量並連接到單個文件

[英]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_incrementbegin_datebegin_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM