批量求日平均:
当文件夹下面有多个nc文件,每个nc文件都包含着对应的月数据,时间分辨率是小时。现在想要将小时数据合并为日平均数据,并且按月进行输出:
for file in v.1980*.nc; do cdo daymean "$file" "daily_$file"; done
上述代码是一个示例:比如我的文件夹下面有v.198001.nc、v.198002.nc、v.198003.nc、v.198004.nc、v.198005.nc、v.198006.nc、v.198007.nc等文件,前面的v.1980是每个文件名称相同的部分,*是不同的部分,.nc是文件后缀。经过上述操作,输出的文件为daily_v.198001.nc、daily_v.198002.nc、daily_v.198003.nc、daily_v.198004.nc、daily_v.198005.nc、daily_v.198006.nc、daily_v.198007.nc。每个文件就是包含当月的日平均数据。
多个文件合并成一个文件
当文件夹下面有多个nc文件,每个文件的空间分辨率和空间范围都是一样的,那么就可以将多个文件按照时间维度进行合并:
cdo -mergetime daily_*.nc 0.25_daily_v_merge.nc
上述代码是一个示例:合并出来的文件只有一个,即:0.25_daily_sq_merge.nc,包含所有daily_的时间。
当合并的时候,也许会出现错误:
这种错误是由于数据精度不正确,导致命令错误,只需要在cdo后面添加一个 -b F32 / -b F64就可以解决。如下:
cdo -b F32 -mergetime daily_*.nc 0.25_daily_v_merge.nc
或
cdo -b F64 -mergetime daily_*.nc 0.25_daily_v_merge.nc
F32和F64可能就是float32和float64精度,所以生成的0.25_daily_v_merge.nc文件大小也不一样。
批量截取空间范围
for file in v.1980*.nc; do cdo sellonlatbox,115,121,23,29 "$file" "FJ_$file"; done
截取范围是115-121°E,23-29°E,生成的文件前缀带“FJ_”。