文件中每列的awk平均值

aji*_*esh 3 awk average comma delimiter

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

输入示例如下:

1,2,3
4,,6
,7,
Run Code Online (Sandbox Code Playgroud)

所需的输出是:

2.5, 4.5, 4.5
Run Code Online (Sandbox Code Playgroud)

我尝试过

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
Run Code Online (Sandbox Code Playgroud)

但是它将连续的定界符视为1和混合列。任何帮助深表感谢。

Jam*_*own 6

您可以使用这种单线:

$ 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
Run Code Online (Sandbox Code Playgroud)

否则,您可以将其保存在文件中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)
}
Run Code Online (Sandbox Code Playgroud)