在for循环中使用ncks从几个netcdf文件中提取数据

时间:2019-02-07 10:16:25

标签: linux bash netcdf nco

我正在尝试从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

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

4 个答案:

答案 0 :(得分:2)

我相信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

答案 1 :(得分:1)

我在您的脚本中看到几个错误,但是没有什么可能导致您的实际错误。

  • 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

三个调用,每个调用一个文件。该代码正在工作。好像还有其他东西。您是在简化代码还是向我们显示完整代码?

答案 2 :(得分:1)

@Packard在这两个方面都是正确的。此外,默认的跨度为1,因此不需要。因此

ncrcat -C -F -d nj_u,151,152 -d ni_u,234,235 -v vel_u 2009120800000 $ {x} .nc testU $ {x} .nc

答案 3 :(得分:0)

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

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)包装的尺寸先使用ncks, 然后将ncrcat应用于生成的文件