Vous pouvez également le faire en utilisant awk
, paste
, et bc
. Je trouve cette approche plus facile à retenir, la syntaxe de awk
me demande toujours de vérifier les choses pour confirmer.
REMARQUE : Cette approche a l'avantage de pouvoir gérer plusieurs lignes de sortie, en soustrayant les 2e, 3e, 4e, etc. nombres du 1er.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | paste -sd- - | bc
7513404
Détails
Ce qui précède utilise awk
pour sélectionner la colonne qui contient les nombres que nous voulons soustraire.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'
7969084
408432
Nous utilisons alors paste
pour combiner ces 2 valeurs valeurs et ajouter le signe moins entre elles.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- -
7969084-346660
Lorsque nous passons ceci à bc
il effectue le calcul.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- - | bc
7513404
La solution purement awk, pas de commandes cat ou grep redondantes :
awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf("%d kB Used\n", TOT-FREE)}' /proc/meminfo
Je vois que awk_FTW m'a devancé mais je pensais que formater la sortie pourrait être sympa.
Essayez ceci :
grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk 'NR==1{s=$2;next}{s-=$2}END{print s}'