phi*_*mos 1 unix linux bash awk command
我有这样一个文件:
id1 name1 grade1 grade2 grade3....gradeN
id2 name2 grade1 grade2 grade3....gradeN
etc
Run Code Online (Sandbox Code Playgroud)
我想用awk打印每行的id,名称和等级平均值.任何的想法?输出应该像:
id1 name1 avg_of_grades
id2 name2 avg_of_grades
Run Code Online (Sandbox Code Playgroud)
使用awk
:
awk '{sum=0;for(i=3;i<=NF;i++) sum+=$i; print $1, $2, (NF>2?sum/(NF-2):0)}' file
Run Code Online (Sandbox Code Playgroud)
从第三列迭代到行尾,并在一个名为的变量中捕获总数sum
.完成后,只需打印第1,2列和平均值.由于sum
将包含滚动总计,我们将其设置为0
脚本的开头,以便为每行初始化它.
注意平均值,我使用的NF
变量包含每行的总列数.我们减去2得到正确的总数(我们从第三列开始捕获).
另外,在你只有两列的情况下,我添加了一个除零的检查.