我有像这样的示例的文本文件:
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