我有一个这样的文件:
user1, 10
user2, 5
user2, 6
user1, 15
user3, 23
user1, 15
我想按第 1 列(user1、user2、user3)计算总计,并使其看起来像这样:
user1, 40
user2, 11
user3, 23
最好的前进方向是什么?在第一列上循环while
并对第二列求和,只要它相同?
答案1
一行 awk:
$ awk -F, '{a[$1] += $2} END { for (x in a) printf "%s, %s\n", x, a[x] }' < data
user1, 40
user2, 11
user3, 23
这相当简单,字段分隔符设置为逗号-F,
(这个和输出中的逗号是重复项中唯一需要的更改)。$1
和$2
是第一个和第二个字段,并且由于 awk 具有关联数组,因此收集总和很简单。sort
如果重要的话,您可能需要稍后输出。
当然,我们也可以纯粹在 Bash/ksh/zsh 中执行此操作,因为它也支持关联数组,但它会更难看、更慢并且更容易出现有趣值的意外。并且仅在由于某种原因具有大 shell 但没有 awk 的系统上有用。 (如果你真的想要的话,请参阅编辑历史记录......)