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つの質問があります。
- 正しいインデックスで読み取る方法を確認するには?
- 古いファイルを上書きせずに、各ループから抽出された値を同じ.ncファイルに保存するにはどうすればよいですか?
答え1
私は推測I.txt
し、値をJ.txt
含めるかoutputNumber
?arrI
インデックスから始めてから0
必要です。
for ((i=0; i<outputNumber; i++))
そうしないと、エラーメッセージに示されているようにインデックスが高すぎてパラメータが欠落しています。
しかし、なぜarrI=($valueI)
すべてのループに割り当てるのですか?ループの前に一度だけ実行できます。