【问题标题】:Using shell to compute averages for students使用 shell 计算学生的平均值
【发布时间】:2013-04-24 20:01:17
【问题描述】:

我有一个名为:'winter'witch 的文件,每行包含一个学生姓名和他在冬季期末考试中的平均成绩:

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

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

【问题讨论】:

    标签: linux bash shell sorting awk


    【解决方案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

    需要注意的是,这个脚本假定没有两个学生的名字相同。

    【讨论】:

    • 感谢 sudo_O,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多