首页 > 解决方案 > 从多个 Netcdf 文件中提取给定变量并连接到单个文件

问题描述

我正在尝试从多个 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。我应该如何处理?

标签: netcdfnetcdf4ncocdo-climate

解决方案


首先,这个命令应该可以工作:

ncrcat -v DUEXTTAU MERRA2_100.tavgM_2d_aer_Nx.??????.nc4 final.nc4

但是,最新版本的 NCO 无法正确重建或重新确定时间坐标何时time是整数,在您的情况下就是这样。该修复程序位于 GitHub 上的最新 NCO 快照中,并将在 4.9.3 中,有望在本周发布。如果不能从源安装,则需要手动干预(例如,time在每个输入文件中使用 更改为浮点ncap2 -s 'time=float(time)' in.nc out.nc)。在任何情况下,time_incrementbegin_datebegin_time属性都是非标准的,只会从第一个文件中复制。但time如果您使用ncrcat.


推荐阅读