查找所有出现的情况并将它们添加在一起

查找所有出现的情况并将它们添加在一起

我有一个这样的文件:

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 的系统上有用。 (如果你真的想要的话,请参阅编辑历史记录......)

相关内容