我有这样一个文件:
id1 name1 grade1 grade2 grade3....gradeN
id2 name2 grade1 grade2 grade3....gradeN
etc
我想使用 awk 打印每行的 id、名称和平均成绩。 任何想法? 输出应该是这样的:
id1 name1 avg_of_grades
id2 name2 avg_of_grades
最佳答案
使用awk
:
awk '{sum=0;for(i=3;i<=NF;i++) sum+=$i; print $1, $2, (NF>2?sum/(NF-2):0)}' file
从第三列迭代到行尾,并在名为 sum
的变量中捕获总数。完成后,只需打印第 1、2 列和平均值。由于 sum
将包含滚动总计,我们在脚本的开头将其设置为 0
以针对每一行对其进行初始化。
请注意,对于平均值,我使用了 NF
变量,它包含每行的总列数。我们减去 2 以获得正确的总数(我们从第三列开始捕获)。
此外,如果您只有两列,我还添加了除以零的检查。
关于linux - 使用awk计算平均成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749647/