awk内の配列を合計しますか?

awk内の配列を合計しますか?

次のコードがあります。

sum1=
sum2=    
declare -a a
echo $temp | awk '{split($0,a,","); name=a[1] ; for(i=2;i<=4;i++) sum1+=a[i] ; for(i=5;i<=7;i++) sum2+=a[i] }'

このコードは機能しません。ここで temp は文字列型です。

abc,1,2,3,4,5,6

実際にファイルのデータを解析しています。入力ファイルは次のとおりです。

abc,1,2,3,4,5,6
de,3,5,7,8,4,2
xyz,6,5,3,7,8,2

読んで使っています。

while  read temp
do
 #do something
done < sample.csv

予想される出力は次の形式です。

Name   Sum1  Sum2
abc      6    15
de      15    14
xyz     14    17 

ベストアンサー1

この試み:

$ awk -F',' 'BEGIN{OFS="\t";print "Name","Sum1","Sum2"}
                  {print $1,$2+$3+$4,$5+$6+$7}' sample.csv 
Name        Sum1 Sum2
abc         6    15
de          15   14
xyz         14   17

Bashループは必要ありませんawk。この-Fオプションを使用すると、入力フィールド区切り文字(この場合)を定義できるため、明示的に行を,分割する必要はありません。awkファイルは1行ずつ読み取られるため、どちらも読み込む必要はありませんbash

このBEGIN{}ブロックは最初の行を読み取る前に実行され、ヘッダーのみを印刷して設定します。出力区切り文字OFS)タブに移動します。フィールドはすでに分離されているので、2-4フィールドと5-7フィールドを合計して各行に印刷するだけです。

おすすめ記事