2016-07-29 11 views
0

私はシェル/ bashスクリプトでは新しいです。 bashまたはシェルスクリプトを使用して、複数のnetcdfファイルからデータを抽出したいとします。 各ファイルには時系列の温度値が含まれています。たとえば :bashスクリプト/シェルスクリプトを使って複数のファイルを読む

FileA.nc contains 20 20 21 22 23 24 
FileB.nc contains 23 24 25 26 27 24 
FileC.nc contains 21 20 19 18 22 23 

は、私は、ファイルごとの値を抽出し、三つのファイルの結果をマージしたいです。 出力はcsvファイルとして保存されているように見えます。

A 20 20 21 22 23 24 
B 23 24 25 26 27 24 
C 23 24 25 26 27 24 

これを行う最も簡単な方法は何ですか? 事前にお手伝いいただきありがとうございます。

+0

は 'A、Bおよびそのon'の単一文字のようなものですか? – sjsam

+0

私のawkスクリプトは期待される出力を与えますが、有効なcsvファイルのようには見えません。 – sjsam

+0

期待される出力は 'fileC.nc'の内容とは異なります。 –

答えて

3

あなたは今、あなたが付加さ個々のファイルを持つ巨大なファイルを持っています

for i in {A..C} 
do 
echo -n "$i " >> master_file 
cat File"$i".nc >> master_file 
done 

AS-進むことができます。今 (あなたは.CSV形式が必要な場合は)コンマにAWKで

sed -i 's/ /,/g' master_file 
+0

あなたの質問は、ファイルには温度データしかないことが示唆されました。あなたは個々の入力ファイルに含まれるものを明確にする必要があります。あなたの質問を編集してください。 – VM17

+0

多くのご協力ありがとうございます、私はここで前のコメントを削除しました。しばらく前に間違ったファイルを処理していました。これは既に私の問題のために働いています。もう一度ありがとう – Lyndz

+0

それが有効な解決策であれば、それを答えとして受け入れてください。 – VM17

1

awkはあなたの友達です:

$ arry=(file{A..C}.nc) # store all the filenames in an array 
$ # Then feed all the files to awk like below 
$ awk '{printf "%s %s\n",gensub(/file(.)\.nc/,"\\1","1",FILENAME),$0}' "${arry[@]}" >newfile 
$ cat newfile 
A 20 20 21 22 23 24 
B 23 24 25 26 27 24 
C 21 20 19 18 22 23 

これは、あなたが私はあなたが既に持っていると仮定し[ gnu awk ]を持っている必要があり。

0

をスペースを作るために:

$ awk '{gsub(/^file|\.nc$/,"",FILENAME); print FILENAME,$0}' file*.nc 
A 20 20 21 22 23 24 
B 23 24 25 26 27 24 
C 21 20 19 18 22 23 
関連する問題