【问题标题】:Extracting dates that satisfied multiple conditions using NCO/CDO or bash使用 NCO/CDO 或 bash 提取满足多个条件的日期
【发布时间】:2022-02-03 03:28:41
【问题描述】:

我有一个 netcdf 文件,其中包含涡度(每秒)和风速(m/s)。我想打印满足以下条件的网格点的日期:

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 文件头的截图。

我将不胜感激。

【问题讨论】:

  • 在不知道您拥有的 NetCDF 数据的结构的情况下,很难得到正确的答案。我认为您至少需要显示 NetCDF 标头或其他一些显示数据结构的信息。
  • 如果至少有一个网格满足条件1)和2),是否要显示当时的日期?
  • 是的@binzo..我会更新我的帖子

标签: netcdf cdo-climate nco


【解决方案1】:

这可以通过结合“cdo”和“nco”来实现。

第二个条件需要的周围4个格子的平均值可以通过结合“cdo”的shiftxyensmean算子来计算。

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-31
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多