Puoi farlo anche usando awk
, paste
e bc
. Trovo questo approccio più facile da ricordare, la sintassi di awk
mi richiede sempre di cercare le cose per confermare.
NOTA: Questo approccio ha il vantaggio di poter gestire più righe di output, sottraendo i numeri 2°, 3°, 4°, ecc. dal 1°.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | paste -sd- - | bc
7513404
Dettagli
Quanto sopra usa awk
per selezionare la colonna che contiene i numeri che vogliamo sottrarre.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'
7969084
408432
Usiamo quindi paste
per combinare questi 2 valori valori e aggiungere il segno meno tra di loro.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- -
7969084-346660
Quando lo passiamo a bc
esegue il calcolo.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- - | bc
7513404
La soluzione puramente awk, nessun comando cat o grep ridondante:
awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf("%d kB Used\n", TOT-FREE)}' /proc/meminfo
Vedo che awk_FTW mi ha preceduto, ma ho pensato che la formattazione dell'output potesse essere utile.
Prova questo:
grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk 'NR==1{s=$2;next}{s-=$2}END{print s}'