【问题标题】:Calculate average of each column in a file计算文件中每一列的平均值
【发布时间】:2016-08-24 11:08:07
【问题描述】:

我有一个包含 n 行(用逗号分隔)和列的文本文件,我想找到每列的平均值,不包括空字段。

示例输入如下所示:

1,2,3
4,,6
,7,

想要的输出是:

2.5, 4.5, 4.5

我试过了

awk -F',' '{ for(i=1;i<=NF;i++) sum[i]=sum[i]+$i;if(max < NF)max=NF;};END { for(j=1;j<=max;j++) printf "%d\t",sum[j]/max;}' input

但它将连续的分隔符视为一列和混合列。 非常感谢任何帮助。

【问题讨论】:

  • 第一个字段的平均值应该是 2.5?
  • 是的,对不起

标签: awk average delimiter comma


【解决方案1】:

你可以使用这个单行:

$ awk -F, '{for(i=1; i<=NF; i++) {a[i]+=$i; if($i!="") b[i]++}}; END {for(i=1; i<=NF; i++) printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)}' foo
2.5 4.5 4.5

否则,您可以将其保存在文件script.awk 中并运行awk -f script.awk your_file

{
    for(i=1; i<=NF; i++) {
        a[i]+=$i
        if($i!="") 
            b[i]++}
    } 
END {
    for(i=1; i<=NF; i++) 
        printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2014-03-15
    • 2016-02-19
    • 2019-04-03
    • 1970-01-01
    相关资源
    最近更新 更多