向随时间增加的 NetCDF 文件添加新的计数器索引变量



我想向现有的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()手册。

我刚刚发现(问了两年后!(还有一个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解决方案很棒,但我想我可能会发现这更容易记住。

最新更新