【问题标题】:How to use awk to calculate average of inputs?如何使用 awk 计算输入的平均值?
【发布时间】:2015-06-16 23:08:24
【问题描述】:

我有一个包含许多值的文件:

10 ; 20 ; 30 ; 40 ;
20 ; 11 ; 15 ; 70 ;
60 ; 50 ; 80 ; 84 ;

如何使用 awk 计算 COLUMNS 中的平均值:

所需的输出:

30;27;41.6;64.66;

欢迎任何解决方案,包括 bash 解决方案。

【问题讨论】:

标签: linux bash awk


【解决方案1】:

在 awk 中,您可以准确地翻译您所要求的内容:

 awk -F\; 'BEGIN{
     ORS=";"
 }
 {
     for (i=1;i<=NF;++i) {
         sum[i] += $i
     }
 }
 END {
     for (i=1;i<=NF;++i) {
         print sum[i]/NR
     }
     print "\n"
 }'

【讨论】:

    【解决方案2】:

    您可以构建一个数组来存储列的总和,并在END 块中计算平均值:

    awk -F';' '{for(i=1;i<=NF;i++)a[i]+=$i}
         END{for(i=1;i<=NF;i++)printf "%.2f%s",a[i]/NR,i==NF?RS:FS}' file
    

    输出:

    30.00;27.00;41.67;64.67
    

    【讨论】:

    • 它有效,但它给了我:30.00;27.00;41.67;64.67;0.00
    • @Alexander 你改变了输入!我的代码用于您的原始输入。如果您更改分隔符,您甚至可以说我的代码根本不起作用。然后在代码中添加空字符串检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2014-11-03
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多