如何根据第一列显示第三列,但保持第二列不变

如何根据第一列显示第三列,但保持第二列不变

我有像这样的示例的文本文件:

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

相关内容