2016-08-24 8 views
2

Ich habe eine Textdatei mit n Anzahl der Zeilen (durch Kommata getrennt) und Spalten und ich möchte den Durchschnitt jeder Spalte finden, ohne leeres Feld.awk Durchschnitt jeder Spalte in Datei

A Abtastwerteingang wie folgt aussieht:

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

Die gewünschte Ausgabe ist:

2.5, 4.5, 4.5 

ich versuchte, mit

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 

Aber es aufeinanderfolgende Trennzeichen als ein und Mischkolonnen behandelt. Jede Hilfe wird sehr geschätzt.

+1

Das erste Feld Durchschnitt wahrscheinlich 2,5 sein sollte? –

+0

Ja, Entschuldigung für den Fehler – ajilesh

Antwort

2

Sie können diese Einzeiler verwenden:

$ 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 

Andernfalls können Sie diese in einer Datei script.awk speichern und ausführen 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

Es hat perfekt funktioniert. Vielen Dank. – ajilesh

Verwandte Themen