我有一个名为“marks”的文件,其中包含学生的名字、姓氏和他本学期所修类(class)的 4 分,每一行如下所示:
John McJohn 56 68 31 99
Ronald McDonald 89 89 60 75
Boaty McBoatface 50 50 50 50
我尝试创建一个 awk 脚本,打印每一行以及每一行(也就是每个学生)的平均分数和他所在的行数。
现在
Student 1, John McJohn, 63,5
Student 2, Ronald McDonald, 78.25
等等等等。
我想出的是:
{
for(i=0; i<FNR; i++)
{
avg=($3+$4+$5+$6)/4;
printf("Student %d, %s %s, %.2f\n", i, $1, $2, avg);
}
}
但是它的输出是一团糟,看起来像笛卡尔积:
我怀疑 i<FNR
有问题使每个循环的行都令人困惑的表达式。
它应该如何?
最佳答案
如果学生的姓名在文件中是唯一的,则不需要 for
循环
avg=($3+$4+$5+$6)/4;
printf("Student %d, %s %s, %.2f\n", NR, $1, $2, avg);
您可以使用 for
循环来计算总和(如果您要添加的字段超过 4 个,这会很方便):
for (i=3;i<7;i++) avg+=$i;
avg=avg/4;
printf("Student %d, %s %s, %.2f\n", NR, $1, $2, avg)}
关于bash - awk:打印每行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41321851/