También puedes hacer esto usando awk
, paste
y bc
. Encuentro este enfoque más fácil de recordar, la sintaxis de awk
siempre requiere que mire las cosas para confirmar.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | paste -sd- - | bc
7513404
Detalles
Lo anterior usa awk
para seleccionar la columna que contiene los números que queremos restar.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'
7969084
408432
Luego usamos paste
para combinar estos 2 valores y agregar el signo menos entre ellos.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- -
7969084-346660
Cuando le pasamos esto a bc
realiza el cálculo.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- - | bc
7513404
La solución puramente awk, sin comandos cat o grep redundantes:
awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf("%d kB Used\n", TOT-FREE)}' /proc/meminfo
Veo que awk_FTW se me adelantó, pero pensé que formatear la salida podría ser bueno.
Prueba esto:
grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk 'NR==1{s=$2;next}{s-=$2}END{print s}'