我有一堆 netcdf 文件,其中包含变量 vel_u,我只想提取其中的某些值。我已经确定了这些值的索引。它们存储在 I.txt 和 J.txt 正如您在下面的代码中看到的,我使用该函数连接
ncrcat -C -F -d dimension1,from,to -d dimension2,from,to -v variable files_to_extract_from.nc file_to_write_to.nc
当我运行下面的代码时,每次循环运行都会遇到相同的错误:
ncrcat: ERROR parsing hyperslab specification for dimension nj_u,,
Must specify minimum and/or maximum value since stride is also empty
ncrcat: HINT Conform request to hyperslab documentation at http://nco.sf.net/nco.html#hyp
这让我认为${arrJ[i]},${arrJ[i+1]}
我的代码的“from,to”部分工作得不好。所以它不知道索引。我的索引存储在 I.txt 和 J.txt 中。例如 181, 195, ... 以及每个循环我希望使用下一个索引从文件中提取。所以迭代1
nj_u,181,182
迭代2
nj_u,195,196
等等。这是我的代码:
#!/bin/bash
outputNumber="$(ls -1q *_??????.nc | wc -l)" # what is the number of files in this directory
echo "the number of output netcdf files is ${outputNumber}"
valueI= `cat I.txt`
valueJ= `cat J.txt`
for ((i=1; i<=outputNumber; i++))
do
arrI=($valueI)
arrJ=($valueJ)
ncrcat -C -F -d nj_u,${arrJ[i]},${arrJ[i+1]} -d ni_u,${arrI[i]},${arrI[i+1]} -v vel_u *_??????.nc NewFile.nc
#every loop I should extract four numbers from every file
done
另一个问题是,使用此代码似乎 NewFile.nc 将在每个循环中被覆盖。
那么两个问题:
- 如何确保它读入正确的索引?
- 如何将从每个循环中提取的值存储在同一个 .nc 文件中而不覆盖旧文件?
答案1
我想I.txt
and J.txt
will 包含outputNumber
价值观?将从arrI
索引开始0
,然后你需要
for ((i=0; i<outputNumber; i++))
否则,您最终会得到索引太高并且缺少参数的结果,如错误消息所示。
顺便说一句,为什么你要arrI=($valueI)
在每个循环中分配?您可以在循环之前执行一次。