是否有 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
我有一个包含每日最高气温、时间、纬度和经度的 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