代码之家  ›  专栏  ›  技术社区  ›  Jellyse

使用NCK in for循环从多个netcdf文件中提取数据

  •  1
  • Jellyse  · 技术社区  · 7 年前

    我试图从netcdf文件中提取某些变量。 如果我将以下代码应用于单个文件,则它可以工作:

    ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000001.nc testU.nc
    

    Hyperslab of a 4D netcdf variable using ncks 请解释。 现在,我想在几个具有以下名称的.nc文件上使用此代码:

    20091208000001.nc
    20091208000002.nc
    20091208000003.nc
    

    我尝试了以下循环:

    # !bin/bash
    for ((x=1;x<=3;x+=1))
    do
    ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 2009120800000$x.nc testU.nc
    done
    

    我得到了错误

    ncks: ERROR received 4 filenames; need no more than two
    

    如何使循环一次仅从一个文件中提取,然后将从所有文件中提取的输出附加到单个输出文件中?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Packard CPW    7 年前

    ni_u,234,235,1 被误认为是另一个文件名。你需要再来一杯 -d 在那之前。

    如果要处理多个nc文件,可能需要重命名 testU.nc 这样它们就不会重叠,或者你可以使用 ncrcat 连接到一个文件中。例如。

    ncrcat -C -F -d nj_u,151,152,1 -d ni_u,234,235,1 -v vel_u 2009120800000?.nc testU.nc
    
        2
  •  1
  •   Poshi    7 年前

    我在你的脚本中看到了一些错误,但没有任何可能导致你的实际错误。

    • shebang线不应包含空间,路径应为绝对路径
    • for 应为分号的条件

      #!/bin/bash
      
      for ((x=1;x<=3;x+=1))
      do
          ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 2009120800000$x.nc testU.nc
      done
      

    当我准备 echo

    ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000001.nc testU.nc
    ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000002.nc testU.nc
    ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000003.nc testU.nc
    

    三次调用,每次调用一个文件。这个代码正在运行。看来还有别的事。您是在简化代码还是向我们展示完整的代码?

        3
  •  1
  •   Charlie Zender    7 年前

    ncrcat-C-F-d nj_,151152-d ni_,234235-v vel_2009120800000${x}.nc testU${x}.nc

        4
  •  0
  •   user12920237    6 年前

    我根据我想要的尺寸(纬度、经度)编辑了上面的代码

    ncrcat -C -F -d nj_u,151,152,1 -d ni_u,234,235,1 -v vel_u 2009120800000?.nc testU.nc
    

    反馈是这样的:

    提示:如果操作失败,请尝试多重标签 http://nco.sf.net/nco.html#msa )首先使用NCK包装尺寸, 然后将ncrcat应用于生成的文件