bash - awk:打印每行的平均值

标签 bash awk

我有一个名为“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);
    }
}

但是它的输出是一团糟,看起来像笛卡尔积:

enter image description here

我怀疑 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/

相关文章:

bash awk 第一列和第三列之后的所有内容

bash - grep 在一个文件上并对多个输出文件进行排序匹配

linux - 将计数器参数传递给 awk 脚本

linux - 如何通过替换 awk/linux 中另一个文件中的字符串来创建新字符串

security - 在 bash 文件中隐藏/加密密码以防止意外看到它

java - bash:/usr/local/android-sdk-linux/tools/android: 权限被拒绝

linux - 一个衬垫,用于使用 xargs 在其他命令生成的搜索文本上 grep 一个命令的输出

linux - ssh 并通过heredoc以另一个用户身份执行多个命令

Bash 通用 "ps aux"按严格名称处理

BASH:同时并排显示两个文件