2016-08-24 150 views
2

我有一個帶有n行(用逗號分隔)和列的文本文件,我想查找每列的平均值,不包括空字段。awk文件中每列的平均值

樣品輸入看起來像:

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

第一場平均大概應該是2.5? –

+0

是的,對不起,對不起 – ajilesh

回答

2

您可以使用此一班輪:

$ 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) 
} 
+0

它的工作完美。非常感謝你。 – ajilesh