使用文本文件中的索引连接 netcdf 变量

使用文本文件中的索引连接 netcdf 变量

我有一堆 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 将在每个循环中被覆盖。

那么两个问题:

  1. 如何确保它读入正确的索引?
  2. 如何将从每个循环中提取的值存储在同一个 .nc 文件中而不覆盖旧文件?

答案1

我想I.txtand J.txtwill 包含outputNumber价值观?将从arrI索引开始0,然后你需要

for ((i=0; i<outputNumber; i++))

否则,您最终会得到索引太高并且缺少参数的结果,如错误消息所示。

顺便说一句,为什么你要arrI=($valueI)在每个循环中分配?您可以在循环之前执行一次。

相关内容