linux - 如何识别 unix 文件中的重复项并对值求和

标签 linux bash unix awk uniq

我正在尝试识别 unix 文件中的重复项并对值进行求和。 例如:

我有一个文件,例如:

aa,  05
aa, 02
aa, 01
bb, 01
bb, 12
cc ,02
dd, 03

我需要输出:

aa, 08
bb, 13
cc, 02
dd,03

最佳答案

这应该可以解决问题:

$ awk '{a[$1]+=$2}END{for(k in a)print k,a[k]}' FS=, OFS=, file
bb,13
cc ,2
dd,3
aa,8

对于要排序的自定义排序管道:

$ awk '{a[$1]+=$2}END{for(k in a)print k,a[k]}' FS=, OFS=, file | sort    
aa,8
bb,13
cc ,2
dd,3

请参阅 man sort 了解 sort 可以执行的所有操作。

如果您想清除逗号周围的空格,那么一种方法是:

$ awk '{a[$1]+=$2}END{for(k in a)print k,a[k]}' FS=' *, *' OFS=, file | sort 
aa,8
bb,13
cc,2
dd,3

关于linux - 如何识别 unix 文件中的重复项并对值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479495/

相关文章:

bash 意外 token 然后错误

node.js - 用于 UNIX 系统的较少样式的 Markdown 查看器

linux - 如何将实际变量传递到 bash 中的文本文件?

linux - bash PS1 : line wrap issue with non-printing characters from an external command

bash - BASH 中的空函数

c - 从串行端口读取时如何实现 read() 超时 (C/C++)

unix - If 条件中的 -f 和 -s 选项有什么区别?

java - 设置文件的执行权限

linux - sched_rt_entity 中数据成员的含义

mysql - 在mysql中创建日期为dd/mm/yyyy格式