使用awk命令
使用grades.txt文件打印出每个学生的名字和姓氏
计算/打印当前的分数百分比(假设相等
每项作业的重量。
grades.txt文件

FN LN Lab HW1 HW2 HW3 HW4
Ryan Slaven 1 1 0 1 1
Jephthah Eustathios 0 1 0 1 0
Andreas Saša 1 0 1 0 1
Godofredo Gerard 1 1 1 1 1
Edwin Babur 1 0 1 1 1
Ahmad Marin 0 0 0 0 0
Jett Marko 1 1 0 1 1

我的答案是:
awk '{sum=0;for(i=3;i<=NF;i++) sum+=$i; print $1, $2, (NF>2?sum/(NF-2):0)*100}' grades.txt

但是,对于fn和ln旁边的输出,它显示0。如何删除0,或使其显示为“平均”?或者,如何删除行?
还有,有没有更好的方法来解决这个问题?

最佳答案

awk 'NR == 1 { print $1, $2, "Average"; next }    # Print a heading row
     NF > 2  { sum=0; for (i=3; i<=NF; i++) sum+=$i; print $1, $2, (sum/(NF-2))*100 }' \
     grades.txt

只需以不同的方式处理第一行;next将跳过第一行的其余脚本。对于具有两个以上字段的其他行,请打印名称和平均值。如果需要,可以报告NF <= 2的行。
样本输出:
FN LN Average
Ryan Slaven 80
Jephthah Eustathios 40
Andreas Saša 60
Godofredo Gerard 100
Edwin Babur 80
Ahmad Marin 0
Jett Marko 80

关于linux - 使用awk计算和打印每行的平均分数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39340333/

10-12 22:16