linux - 来自 shell 的 GROUP BY/SUM

我有一个包含如下数据的大文件:

a 23
b 8
a 22
b 1

我希望能够得到这个:

a 45
b 9

我可以先对该文件进行排序,然后在 Python 中扫描该文件一次。有什么好的直接命令行方式来执行此操作?

最佳答案

编辑:现代 (GNU/Linux) 解决方案,正如几年前的评论中提到的 ;-) 。

awk '{
    arr[$1]+=$2
   }
   END {
     for (key in arr) printf("%s\t%s\n", key, arr[key])
   }' file \
   | sort -k1,1

最初发布的解决方案,基于旧的 Unix sort 选项:

awk '{
    arr[$1]+=$2
   }
   END {
     for (key in arr) printf("%s\t%s\n", key, arr[key])
   }' file \
   | sort +0n -1

我希望这会有所帮助。

https://stackoverflow.com/questions/10286522/

相关文章:

linux - 如何使用 mount(8) 和 fstab 注册 FUSE 文件系统类型?

linux - 列出包含字符串但 *NOT* 包含另一个字符串的文件的 Unix 命令

c - 格式化结构时间规范

linux - 在脚本内使用没有密码的 sudo

python - 如何使用 Python 获取硬盘序列号

python - 这是在 Python 中运行 shell 脚本的正确方法吗?

linux - 将 AWK 结果分配给变量

linux - 在 Docker 容器中挂载 SMB/CIFS 共享

linux - 是否可以让vim显示行号?

linux - 将任何当前目录 './' 添加到 Linux 中的搜索路径