次の入力ファイルがあります。
ABC 1 2
DEF 3 4
ABC 4 8
DEF 7 1
予想される出力は、最初の列をグループ化し、列2と3の値を追加することです。次に、2列と3列の値を分割し、結果を4列に保存します。
ABC 5 10 0.5
DEF 10 5 2
あなたのアドバイスに感謝します。
答え1
awk '{r[$1]+=$2;R[$1]+=$3}END{for(i in r){print i" "r[i]" "R[i]" "r[i]/R[i]}}'
読む:
- 各行に対して、最初の列を
$1
のインデックスとして保存し、列の累積r
(+=
)合計$2
をの値として保存r
し$3
、その列に対しても同じことを行いますR
。 - すべての行を読み取ったら(
END
)合計()、合計()、最後に$1
各グループの割合を印刷します。i
$2
r[i]
$3
R[i]
∑($2)
∑($3)