テキストファイルのインデックスを使用してnetcdf変数を連結する

テキストファイルのインデックスを使用してnetcdf変数を連結する

vel_u変数を含むnetcdfファイルが複数あり、そのファイルから特定の値を抽出したいと思います。私はこれらの値の指数を決めました。 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

もう1つの問題は、このコードを使用すると、すべてのループでNewFile.ncを上書きするように見えることです。

2つの質問があります。

  1. 正しいインデックスで読み取る方法を確認するには?
  2. 古いファイルを上書きせずに、各ループから抽出された値を同じ.ncファイルに保存するにはどうすればよいですか?

ベストアンサー1

私は推測I.txtし、値をJ.txt含めるかoutputNumberarrIインデックスから始めてから0必要です。

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

そうしないと、エラーメッセージに示されているようにインデックスが高すぎてパラメータが欠落しています。

しかし、なぜarrI=($valueI)すべてのループに割り当てるのですか?ループの前に一度だけ実行できます。

おすすめ記事