linux - 使用 awk 计算并打印每行的平均分数

标签 linux unix awk

使用 awk 命令

  1. 使用 grades.txt 文件打印出每个学生的姓名和姓氏 计算/打印他们当前的百分比分数(假设相等 每个作业的权重)。

成绩.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 '{print $1, $2, (NR>1 ? 100*gsub(1,1)/(NF-2) : "Average")}' file
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/

相关文章:

linux - 在 Linux 中根据文件中的文本拆分大文件的最快方法

Java 性能 Windows 与 Linux

linux - scp 从多个目录下载多个文件

python - 通过调用 unix-shell 命令在 python 中使用 Sftp

linux - 我可以使用/dev/null 作为 find 命令吗?

linux - AWK 在 system() 中插入变量值

awk - 如果冒号后不存在数据,则使用 sed 删除记录

linux - Iptables - 如何仅允许从 * :27005 连接到端口 27015

linux - 为什么wget改变文件类型?

unix - 远程 Unix 终端键映射