2017-06-18 1 views
3

Ich möchte den Durchschnitt der ersten Spalte einer Textdatei berechnen, Zeilen durch 5 teilbar. Als Beispiel, betrachten Sie die folgenden Daten.Durchschnitt der Spalten überspringen Zeilen durch 5 teilbar mit Hilfe von awk

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

Für die obigen Daten kann ich den Mittelwert der

awk '{ sum += $1 } END { if (NR > 0) print sum/NR }' file 

Verwendung als awkgesamten Spalt berechnen, die das Ergebnis 5.5 druckt.

Wie kann ich diesen Code erweitern, um durch den Mittelwert teilbare Zeilen auszuschließen? Für das oben angegebene Beispiel würde dies die Zahlen 5 und 10 vom Durchschnitt ausschließen, was zu einem neuen Durchschnitt von 5 führt.

Antwort

2

Short awk Lösung:

awk '{ NR%5? s+=$0 : c++ }END{ print s/(NR-c) }' file 

Der Ausgang:

5 

  • NR%5? s+=$0 : c++ - ternären Zustand: summiert alle Werte s+=$0 wenn Rekordzahl NR ist nicht durch 5 teilbar, sonst - Anzahl übersprungener Datensätze (um sie von der Durchschnittsberechnung zu subtrahieren)
Verwandte Themen