是否有 NCO 命令更改 netcdf 中变量的时间戳?

Is there an NCO command to change the time stamp of a variable in a netcdf?

我有一个包含每日最高气温、时间、纬度和经度的 netcdf 文件。我使用 nco 命令成功地从 6 小时温度的 netcdf 中获得了最高温度:

ncra -y max --mro -d 时间,4,4 6hourly.nc max.nc"

唯一的问题是,我的时间步长仍然分为四分之一天:

变量:

double lon(lon) ;
    lon:units = "degrees_east" ;
    lon:long_name = "lon" ;
    lon:standard_name = "longitude" ;
double lat(lat) ;
    lat:units = "degrees_north" ;
    lat:long_name = "lat" ;
    lat:standard_name = "latitude" ;
double time(time) ;
    time:units = "days since 0850-01-01 00:00:00" ;
    time:long_name = "time" ;
    time:calendar = "proleptic_gregorian" ;
double tair(time, lat, lon) ;
    tair:units = "K" ;
    tair:_FillValue = 1.e+30 ;
    tair:long_name = "2 meter air temperature" ;
    tair:days\ since\ 850 = 0., 0.25, 0.5, 0.75, 1., 1.25, 1.5, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.25, 3.5, 3.75, 4., 4.25, 4.5, 4.75, 5., 5.25, 5.5, 5.75, 6., 6.25, 6.5, 6.75, 7., 7.25, 7.5, 7.75, 8., 8.25, 8.5, 8.75, 9., 9.25, 9.5, 9.75, 10., 10.25, 10.5, 10.75, 11., 11.25, 11.5...

我的问题是,如何将变量 tair 中 'days\ since\ 850' 属性的时间步长更改为整数?

谢谢!

夏洛特

ncap2 可以使用属性。但是,您有一个特别棘手的问题,因为您的属性名称包含空格,而属性值是一个数组。我认为在这种情况下你需要先重命名属性,然后再操作它。 (然后您可以根据需要将其重命名。):

ncrename -O -a "tair@days since 850",tair@days_since_850 in.nc foo.nc
ncap2 -O -s 'tair@days_since_850=int(tair@days_since_850)' foo.nc out.nc

编辑 20210209 以回答下面的评论: 要将属性从一个变量复制到另一个变量,请尝试

ncap2 -s 'var1@att1=var2@att2' in.nc out.nc

万一有人遇到类似问题,这最终对我有用:

ncap2 -s 'time=array(0,1,$time)' outmax.nc outmax2.nc
ncap2 -s 'time=array(0,1,$time)' outmin.nc outmin2.nc