Generisches awk Skript berechnen Durchschnitt auf ein beliebiges Feld durch Befehlszeilenargument

StackOverflow https://stackoverflow.com/questions/1434016

Frage

Ich mag einen generischen awk-Skript schreiben, die als Eingabe eine Datei und eine Feldnummer (in dieser Datei) nehmen und geben Sie mir den durchschnittlichen Wert dieses Feld in dieser Datei. Ich würde es so etwas wie folgt verwenden:

bash$ avg.awk 3 input.file
22
bash$ avg.awk 4 input.file
2001

Natürlich kann ich das Drehbuch schreiben, wenn ich weiß, welches Feld (zum Beispiel $ 3) ich vorher im Durchschnitt werde. Das wäre so etwas wie dies:

//{tot+=$3; count++}
END{
    print tot/count;
}

Aber ich will in der Lage sein, das Feld I über eine Befehlszeilenoption mitteln ändern möchten. Ist das möglich? Dank!

War es hilfreich?

Lösung

Dieser wird tun, was Sie wollen:

$ cat avg.awk
#!/usr/bin/env awk -f
# Calculate average, syntax: avg.awk field-number file
BEGIN { field = ARGV[1]; ARGV[1] = "" }
{ sum += $field }
END { print sum / NR }

$ cat data
1 5 7
3 6 5
8 4 6

$ avg.awk 1 data
4

$ avg.awk 2 data
5

$ avg.awk 3 data
6

Andere Tipps

{ tot += $field; count++ }
END { print tot/count }

Aufruf wie awk -v field=3 -f avg.awk input.file

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top