使用shell计算学生的平均值

时间:2013-04-24 20:01:17

标签: linux bash shell sorting awk

我有一个名为'winter'的文件,每行包含一个学生姓名和他冬季决赛中成绩的平均值:

John 4
Brian 8.5

另一个名为'summer'的文件,每行包含一个学生姓名和夏季决赛的5个等级:

John 8 7 9 4 7
Brian 10 9 4 5 8

我想计算每个学生的年平均成绩:

John ((8+7+9+4+7)/5 + 4)/2
Brian ((10+9+4+5+8)/5 + 8.5)/2

输出将按年平均值排序,因此成绩最高的学生排在第一位。

我希望使用shell编程来完成。

我尝试使用awk计算平均值:

awk '{print $1 " " ($2 + $3 + $4 + $5 + $6)/5}' summer

但我不知道如何继续,甚至不知道如何开始。

1 个答案:

答案 0 :(得分:1)

这是一种方法:

$ awk 'FNR==NR{a[$1]=$2;next}{print $1,(a[$1]+($2+$3+$4+$5+$6)/5)/2}' winter summer | sort -rnk2
Brian 7.85
John 5.5

<强>解释

条件FNR==NR仅在我们位于第一个文件winter时才为真,因此仅对该文件执行该块。该块只是创建一个数组,其中学生姓名是键,等级是值。 next语句跳转到文件中的下一行。当我们在第二个文件中时,脚本与您的脚本非常相似,但我们使用该数组从第一个文件中获取等级。对第二个字段-r进行排序很简单-n反向-k2数字排序。

应该注意的是,该脚本假定没有两个学生具有相同的名称。