向 netcdf 文件添加一个随时间增加的新变量

add a new variable to a netcdf file that increases with time

我想在现有的netcdf文件中添加一个新变量,它只是随着文件的时间变量线性增加,也就是说,在第一个时间片上变量到处都是数字1,在第二个时间片上它设置为 2,等等

我知道如何在 python 或 fortran 中打开文件并定义和添加变量并写出修改后的文件,但我希望有一种快速简便的方法可以从使用 ncocdo 的命令行。我还想知道我是否可以通过使用 ncdump 将文件转储为 CDL 格式,破解它并使用 ncgen 将其转回 netcdf 来做到这一点,但是这似乎比 python 方法更冗长和有问题。

对于一维数组使用这个

ncap2 -s 'var=array(1,1,$time)' in.nc out.nc

对于多维数组,只需将其添加到零数组

ncap2 -s 'var=array(0,0,/$time,$lat,$lon/)+array(1,1,$time)' in.nc out.nc

数组的数值类型由数组函数的第一个参数的类型决定。有关详细信息,请参阅 array() 上的 manual

我刚刚发现(问了两年后!)还有一个 cdo 函数 seq 可以产生一个递增的时间序列。生成的文件是针对单个点的,因此您需要 enlarge 字段以匹配目标网格,最后 merge 与原始文件:

# in the follow $n is the number of timeslices in in.nc 
cdo -f nc4 seq,1,$n seq.nc 
cdo enlarge,in.nc seq.nc seq2d.nc # enlarge to in.nc grid
cdo merge in.nc seq2d.nc out.nc   # and merge

您可以通过以下方式将所有内容通过管道传输到一个命令中:

cdo merge in.nc -enlarge,in.nc -seq,1,$n out.nc

nco 解决方案很棒,但我想我可能会觉得它更容易记住。