首页 > 解决方案 > 我们如何使用 shell 脚本对文件中的值分组进行求和

问题描述

我有一个文件,其中有学生卷号、姓名、主题、获得分数和总分数据:

10 William English 80 100
10 William Math 50 100
10 William IT 60 100
11 John English 90 100
11 John Math 75 100
11 John IT 85 100

我怎样才能得到shell Shell中每个学生的总和(总得分)?我想要这个输出:

William 190
John 250

我试过这个:

cat student.txt | awk '{sum += $14}END{print sum" "$1}' | sort | uniq -c | sort -nr | head -n 10

这不是按总和分组的工作链接。

标签: bashshellawksh

解决方案


使用一个awk命令:

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

输出

William 190
John 250

如果要对输出进行排序,可以通过管道传输到sort,例如按数字第二个字段降序:

awk '{a[$2]+=$4} END {for (i in a) print i,a[i]}' file | sort -rnk2

或按学生姓名升序:

awk '{a[$2]+=$4} END {for (i in a) print i,a[i]}' file | sort

推荐阅读