no debian que tenho na minha frente agora, free -t
mostra uma Total:
row:
total used free shared buffers cached
Mem: 8197980 2583348 5614632 0 222508 1904352
-/+ buffers/cache: 456488 7741492
Swap: 7807584 0 7807584
Total: 16005564 2550180 13455384
Se você precisar dessa linha, poderá usar tail
e awk
para obter os valores.
No entanto, se o seu free
não mostrar essa linha, você poderá usar o awk com RS=""
para unir as linhas:
free | awk -v RS="" '{print $10 "+" $17 "+" $21}' | bc
Se o layout da coluna do seu free
for diferente do meu, talvez você precise mexer nos números dos campos.
Explicação:
O campo RS
é o separador de registro. Configurar isso para ""
une todas as linhas na saída de livre, então awk
pode referenciá-las como se estivessem em uma 'linha'.
Contando desde o início, $1
to $6
são os cabeçalhos da coluna, $7
é o Mem:
cabeçalho da linha, $8
to $10
são os valores nessa linha ... Portanto $10
é o valor de memória livre. Isso é feito de maneira semelhante para os seguintes valores:
total used free shared buffers cached
Mem: $8 $9 $10 $11 $12 $13
-/+ buffers/cache: $16 $17
Swap: $19 $20 $21
O comando awk {print $10 "+" $17 "+" $21}
basicamente une esses valores com +
entre e a saída é canalizada para bc
para calcular a soma.