次のデータセットタブがあります。
A B C D
1 aaa 1 2
1 aaa 3 4
1 aaa 5 6
1 bbb 7 8
1 ccc 9 1
1 ccc 2 3
1 ddd 4 5
1 ddd 6 7
1 ddd 8 9
1 ddd 1 2
グループBのCの合計を表示するために新しい列Eを追加したいと思います。
希望の出力:
A B C D E
1 aaa 1 2 9
1 aaa 3 4 9
1 aaa 5 6 9
1 ddd 4 5 19
1 ddd 6 7 19
1 ddd 8 9 19
1 ddd 1 2 19
答え1
awk 'BEGIN{ FS=OFS="\t" }
NR==FNR{
if (FNR>1) a[$2]+=$3
next
}
{ $(NF+1)=(FNR==1 ? "E" : a[$2]) }
1
' file file
入力ファイルを2回読みます。最初の実行では、ヘッダー行(if (FNR>1)...
)をスキップし、フィールド値をキーを持つ配列値に追加します$3
。続けて録音してください。a
$2
next
2番目の実行では、最初の行にE
新しいフィールドを割り当てるか、$(NF+1)
別の行に割り当てられた値を割り当てます。a[$2]
履歴を印刷します。
出力:
A B C D E
1 aaa 1 2 9
1 aaa 3 4 9
1 aaa 5 6 9
1 bbb 7 8 7
1 ccc 9 1 11
1 ccc 2 3 11
1 ddd 4 5 19
1 ddd 6 7 19
1 ddd 8 9 19
1 ddd 1 2 19