次の例を含むテキストファイルがあります。
a | 0 | 11
a | 0 | 22
a | 1 | 22
a | 1 | 22
私は次のコマンドを使用しています:
awk -F"|" '{ sum[$1"|"$2]+=$3 } END { for (user in sum) printf "%10d |%12.2f\n",user,sum[user] }' myfile
結果を生む
0 | 33.00
0 | 44.00
私の予想結果
a | 0 | 33
a | 1 | 44
答え1
あなたの声明を修正してくださいprintf
:
awk -F'|' '
{sum[$1"|"$2]+=$3}
END{for (i in sum){printf "%s| %d\n",i,sum[i]}}
' file
出力:
a | 0 | 33
a | 1 | 44
SQLの場合、これは非常に簡単な作業でもあります。
csvsql -d '|' -H --tables t \
--query 'select trim(a),b,sum(c) from t group by a,b' \
<(grep -v '^$' file)
出力:
trim(a),b,sum(c)
a,0,33
a,1,44
| tail -n+2
ヘッダー行を削除するには、追加して| csvformat -D '|'
区切り記号をに変更します|
。
出力:
a|0|33
a|1|44