Sie können dies auch mit awk
tun , paste
, und bc
. Ich finde diesen Ansatz leichter zu merken, die Syntax von awk
erfordert immer, dass ich Dinge nachschlage, um sie zu bestätigen.
HINWEIS: Dieser Ansatz hat den Vorteil, dass er mit mehreren Ausgabezeilen fertig werden kann, indem die 2., 3., 4. usw. Zahl von der 1. subtrahiert wird.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | paste -sd- - | bc
7513404
Einzelheiten
Oben wird awk
verwendet , um die Spalte auszuwählen, die die Zahlen enthält, die wir subtrahieren möchten.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'
7969084
408432
Wir verwenden dann paste
um diese 2 Werte zu kombinieren und das Minuszeichen dazwischen hinzuzufügen.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- -
7969084-346660
Wenn wir dies an bc
übergeben es führt die Berechnung durch.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- - | bc
7513404
Die reine awk-Lösung, keine überflüssigen cat- oder grep-Befehle:
awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf("%d kB Used\n", TOT-FREE)}' /proc/meminfo
Ich sehe, awk_FTW ist mir zuvorgekommen, aber ich dachte, die Ausgabe zu formatieren könnte nett sein.
Versuchen Sie Folgendes:
grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk 'NR==1{s=$2;next}{s-=$2}END{print s}'