【问题标题】:Average from different columns in shell scriptshell脚本中不同列的平均值
【发布时间】:2015-07-22 08:04:54
【问题描述】:

我有一个包含 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

【问题讨论】:

  • 您可以完全删除 m 变量及其分配,因为您从不使用它。

标签: linux shell unix awk average


【解决方案1】:

这应该可行

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 中执行默认操作,即打印该行。

【讨论】:

    【解决方案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
    

    【讨论】:

    • 还要注意for () {action} print 可以只是for () action; print,因为如果你执行不止一件事,括号是必需的。但是,无论如何,它们使事情变得更加清晰。
    猜你喜欢
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多