shell脚本中不同列的平均值

时间:2015-07-22 08:04:54

标签: linux shell unix awk average

我有一个包含10列的数据文件,如下所示

ifile.txt
2  4  4  2  1  2  2  4  2  1
3  3  1  5  3  3  4  5  3  3
4  3  3  2  2  1  2  3  4  2
5  3  1  3  1  2  4  5  6  8

我想添加第11列,它将显示10列中每行的平均值。即AVE(2 4 4 2 1 2 2 4 2 1)等。虽然我的后续脚本运行良好,但我想让它更简单和简短。我提前感谢您提供这方面的任何帮助或建议。

awk '{for(i=1;i<=NF;i++){s+=$i;ss+=$i}m=s/NF;$(NF+1)=ss/NF;s=ss=0}1' ifile.txt

2 个答案:

答案 0 :(得分:4)

这应该有效

awk '{for(i=1;i<=NF;i++)x+=$i;$(NF+1)=x/NF;x=0}1' file

对于每个字段,您将值添加到循环中的x

接下来,将字段11设置为x中的总和除以字段数NF

将下一行的x重置为零。

1等于true,并在awk中执行默认操作,即打印该行。

答案 1 :(得分:2)

这是帮助

awk '{for(i=1;i<=NF;i++)s+=$i;print $0,s/NF;s=0}' ifile.txt

awk '{for(i=1;i<=NF;i++)ss+=$i;$(NF+1)=ss/NF;ss=0}1' ifile.txt