使用 NCO/CDO 或 bash 提取满足多个条件的日期
Extracting dates that satisfied multiple conditions using NCO/CDO or bash
我有一个包含涡度(每秒)和风(m/s)的 netcdf 文件。我想打印满足以下条件的网格点的日期:
1).涡度 > 1x10^-5 每秒和风 >= 5 m/s 在网格点。
2).在 (1) 中找到的网格点周围的“四个”(北、西、东、南)的涡度和风的平均值也应分别 > 1x10^-5 和 5m/s。
我可以使用 ncap 过滤满足 (1) 的网格点:
ncap2 -v -O -s 'where(vort > 1e-5 && winds >= 5) vort=vort; elsewhere vort=vort.get_miss();' input_test.nc output_test.nc
如何获取日期?还有我怎样才能实现第二个条件。
这里是 netcdf 文件 header 的截图。
我将不胜感激。
这可以通过组合“cdo”和“nco”来实现。
第二个条件所需要的周围4个格子的平均值可以通过结合"cdo"的shiftxy
和ensmean
运算符来计算。
cdo selname,vr,wspd input_test.nc vars.nc
cdo -expr,'vr_mean=vr; wspd_mean=wspd' \
-ensmean \
-shiftx,1 vars.nc \
-shiftx,-1 vars.nc \
-shifty,1 vars.nc \
-shifty,-1 vars.nc \
vars_mean.nc
然后,您可以使用“cdo”的 merge
运算符将检查条件 1) 和 2) 所需的变量组合到一个 NetCDF 文件中,并使用 ncap2 来检查您尝试过的条件。
在下面的示例命令中,“ncap2”的“for”循环用于扫描时间。如果每次至少有一个格子同时满足条件1)和2),则显示该时间的信息。
cdo merge vars.nc vars_mean.nc vars_test.nc
ncap2 -s '*flag = (vr > 1e-5 && wspd >= 5) && (vr > 1e-5 && wspd >= 5); *nt=$time.size; for(*i=0;i<nt;i++) { if ( max(flag(i,:,:))==1 ) { print(time(i)); } }' vars_test.nc
我有一个包含涡度(每秒)和风(m/s)的 netcdf 文件。我想打印满足以下条件的网格点的日期:
1).涡度 > 1x10^-5 每秒和风 >= 5 m/s 在网格点。
2).在 (1) 中找到的网格点周围的“四个”(北、西、东、南)的涡度和风的平均值也应分别 > 1x10^-5 和 5m/s。
我可以使用 ncap 过滤满足 (1) 的网格点:
ncap2 -v -O -s 'where(vort > 1e-5 && winds >= 5) vort=vort; elsewhere vort=vort.get_miss();' input_test.nc output_test.nc
如何获取日期?还有我怎样才能实现第二个条件。
这里是 netcdf 文件 header 的截图。
我将不胜感激。
这可以通过组合“cdo”和“nco”来实现。
第二个条件所需要的周围4个格子的平均值可以通过结合"cdo"的shiftxy
和ensmean
运算符来计算。
cdo selname,vr,wspd input_test.nc vars.nc
cdo -expr,'vr_mean=vr; wspd_mean=wspd' \
-ensmean \
-shiftx,1 vars.nc \
-shiftx,-1 vars.nc \
-shifty,1 vars.nc \
-shifty,-1 vars.nc \
vars_mean.nc
然后,您可以使用“cdo”的 merge
运算符将检查条件 1) 和 2) 所需的变量组合到一个 NetCDF 文件中,并使用 ncap2 来检查您尝试过的条件。
在下面的示例命令中,“ncap2”的“for”循环用于扫描时间。如果每次至少有一个格子同时满足条件1)和2),则显示该时间的信息。
cdo merge vars.nc vars_mean.nc vars_test.nc
ncap2 -s '*flag = (vr > 1e-5 && wspd >= 5) && (vr > 1e-5 && wspd >= 5); *nt=$time.size; for(*i=0;i<nt;i++) { if ( max(flag(i,:,:))==1 ) { print(time(i)); } }' vars_test.nc