linux - 列唯一值 linux

标签 linux unix uniq

我试图弄清楚如何根据最后一列之前的所有值只保留唯一值,但也保留最后一列数据。我也想对数据进行排序。例如:

输入
非洲很大 20
印正蓝胶10
非洲很大10
意大利在欧洲3
美国2014 15
意大利制作披萨 3

输出:
非洲很大 30
美国2014 15
印正蓝胶10
意大利做披萨3
意大利在欧洲 3

我知道您可以使用 sort -n 和 uniq,但我不确定我可以使用的其他功能。谢谢!

最佳答案

uniq 在这里不起作用,因为它无法构建第二列的总和。但是您可以为此使用 awk:

awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}' input.file

您已经稍微更改了输入数据,现在需要对 awk 脚本进行通用化。上面的脚本将根据第一列的值对数据进行分组并对第二列求和,而下面的脚本将根据第一列的值对数据进行分组,直到最后一列并计算最后列的总和:

awk 'match($0,/.* /){a[substr($0,RSTART,RLENGTH)]+=$NF}END{for(i in a)print i,a[i]}' file

关于linux - 列唯一值 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24615735/

相关文章:

linux - 文件排序后未排序

linux - 在两列中显示重复行,每列三列

linux - 部署 Linux 游戏、共享库/依赖项

linux - 使用 rpmrebuild 修改 rpm

c++ - 假设任何 x86 编译的应用程序总是在 x64 版本下运行是否安全?

cygwin 上的 C 运行时和日期命令

unix - 根据创建/修改日期在 unix 中查找文件

linux - linux 中的多个 sed -e 命令用法

c - 获取内核模块中已安装文件系统的列表?

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