计算文件中每一列的平均值 [英] Calculate average of each column in a file

查看:119
本文介绍了计算文件中每一列的平均值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a text file with n number of rows (separated by commas) and columns and I want to find average of each column, excluding empty field.

输入示例如下:

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

但是它将连续的定界符视为1和混合列. 非常感谢您的帮助.

But it treats consecutive delimiters as one and mixing columns. Any help is much appreciated.

推荐答案

您可以使用以下一种代码:

You can use this one-liner:

$ 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:

Otherwise, you can save this in a file script.awk and run 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)
}

这篇关于计算文件中每一列的平均值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆