使用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/