在 for 循环中使用 ncks 从多个 netcdf 文件中提取数据
Extract data from several netcdf files using ncks in for loop
我正在尝试从 netcdf 文件中提取某些变量。
如果将以下代码应用于单个文件,则以下代码有效:
ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000001.nc testU.nc
另请参阅问题: 以获取解释。
现在我想在几个具有以下名称的 .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
如何让循环一次只从一个文件中提取,然后将提取的所有文件的输出追加到一个输出文件中?
我在您的脚本中发现了一些错误,但没有任何可能导致您实际出错的错误。
- shebang 行不应包含 space 且路径应为绝对路径
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
三个调用,每个调用一个文件。该代码正在运行。好像还有别的东西。您是在简化代码还是向我们展示完整代码?
我认为 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
@Packard 在这两个方面都是正确的。此外,步长 1 是默认值,因此不需要。因此
ncrcat -C -F -d nj_u,151,152 -d ni_u,234,235 -v vel_u 2009120800000${x}.nc testU${x}.nc
我根据我想要的维度(纬度、经度)编辑了上面的代码
ncrcat -C -F -d nj_u,151,152,1 -d ni_u,234,235,1 -v vel_u 2009120800000?.nc testU.nc
反馈是这样的:
HINT: If operation fails, try multislabbing
(http://nco.sf.net/nco.html#msa) wrapped dimension using ncks first,
and then apply ncrcat to the resulting file
我正在尝试从 netcdf 文件中提取某些变量。 如果将以下代码应用于单个文件,则以下代码有效:
ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000001.nc testU.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
如何让循环一次只从一个文件中提取,然后将提取的所有文件的输出追加到一个输出文件中?
我在您的脚本中发现了一些错误,但没有任何可能导致您实际出错的错误。
- shebang 行不应包含 space 且路径应为绝对路径
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
三个调用,每个调用一个文件。该代码正在运行。好像还有别的东西。您是在简化代码还是向我们展示完整代码?
我认为 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
@Packard 在这两个方面都是正确的。此外,步长 1 是默认值,因此不需要。因此
ncrcat -C -F -d nj_u,151,152 -d ni_u,234,235 -v vel_u 2009120800000${x}.nc testU${x}.nc
我根据我想要的维度(纬度、经度)编辑了上面的代码
ncrcat -C -F -d nj_u,151,152,1 -d ni_u,234,235,1 -v vel_u 2009120800000?.nc testU.nc
反馈是这样的:
HINT: If operation fails, try multislabbing (http://nco.sf.net/nco.html#msa) wrapped dimension using ncks first, and then apply ncrcat to the resulting file