我有一个这样的文件:
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
答案 0 :(得分:5)
使用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得到正确的总数(我们从第三列开始捕获)。
另外,在你只有两列的情况下,我添加了一个除零的检查。