Ich versuche herauszufinden, wie ich AWK verwenden kann, um Linien zu subtrahieren. Stellen Sie sich zum Beispiel vor, die Eingabedatei lautet:
30
20
Die Ausgabe wäre:
10
Als Test versuche ich nun, die "Used" -Speicherspalte zu berechnen aus:
$ cat /proc/meminfo
Im Moment habe ich folgendes geschrieben:
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
-- Here comes the calculation using AWK
Ich habe folgendes versucht:
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | awk '{$0-s}{s=$0} END {print s}'
Dies gibt mir jedoch nur die letzte Datenzeile.
Ich habe eine funktionierende Lösung gefunden, aber ich bezweifle, dass es die optimalste ist. Alle meine Codierungserfahrungen zeigen mir, dass die harte Codierung der Anzahl der Zeilen schrecklich ist: P.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | awk 'NR == 1{s=$0} NR == 2 {s=s-$0} END {print s}'
line1_$2 - line2_$2 - lineN-$2
? Möchten Sie nur die ersten beiden aufeinander folgenden Zeilen subtrahieren?