次のテキストファイルがあります。
A 500 100 ABC
B 200 100 BBB
B 200 100 ACC
D 150 235 CDD
A 500 100 RER
C 210 653 DDD
C 210 653 DWR
D 150 653 DDW
D 150 653 DER
私が達成しようとしているのは、最初の識別名をフィルタリングし、その後のすべての値の合計(列2と列3の合計)を取得することです。たとえば、次のようになります。
A 1000 200
B 400 200
次のawk行を使用して最初の2つを操作しました。
awk '{a[$1]+=$2} END {for(i in a) print i,a[i] }' file
結果:
A 1000
B 400
私はミックスに3番目の列を追加する必要があると主張します。列3を追加する方法についてのヒントがある人はいますか?
ベストアンサー1
次のテストバージョンをお試しください。
awk '{ colone[$1]+=$2; coltwo[$1]+=$3; } END { for (i in colone) { print i " " colone[i] " " coltwo[i]; }}' file
連想配列を使用します。有名なチュートリアルをご覧ください。Awk - チュートリアルと紹介 - Bruce Barnett
テストは次のとおりです。
awk '{ colone[$1]+=$2; coltwo[$1]+=$3; } END { for (i in colone) { print i " " colone[i] " " coltwo[i]; }}' file
A 1000 200
B 400 200
C 420 1306
D 450 1541