Você pode usar top no modo em lote e uma única iteração:
top -bn 1
Eu também usaria free em vez de analisar meminfo .
Outra maneira é usar ps , adicionar a% de CPU de cada processo e dividir pelo número de núcleos que sua máquina possui:
ps axo pcpu |
gawk -v cores='grep -m 1 cores /proc/cpuinfo | cut -d ' ' -f 3' \
-v cpus='grep -c processor /proc/cpuinfo' \
'{k+=$1}END{print k/(cores * cpus);}'
Se o seu sistema tiver apenas um núcleo, o script acima falhará, produzindo:
gawk: cmd. line:1: (FILENAME=- FNR=83) fatal: division by zero attempted
Para que seja possível, altere k/(cores * cpus) para k/(cores==""?1:cores * cpus) . Isso verificará se a variável cores não está vazia, se for, 1 será usado no lugar.