Generisches awk Skript berechnen Durchschnitt auf ein beliebiges Feld durch Befehlszeilenargument
-
07-07-2019 - |
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!
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