output na forma json

3

O seguinte comando fornece o uso da memória no formato normal.

awk '/^Mem/ {printf("%u%%", 100*$3/$2);}' <(free -m)

Eu quero obtê-lo na forma json válida.

Saída de desejo:
Exemplo:

{"Memory":"80"}
    
por Ketan Patel 26.03.2013 / 08:46

3 respostas

2

Talvez isso, leia informações do processo e use bc para calcular:

#!/bin/bash
tot=$(awk '{ if (/MemTotal:/) {print $2} }' </proc/meminfo)
free=$(awk '{ if (/MemFree:/) {print $2} }' </proc/meminfo)
pers=$(echo "scale=0; 100 - 100 * $free / $tot" | bc)
echo '{"Memory":"'$pers'"}'
    
por 26.03.2013 / 09:13
2

Se o uso de awk não for obrigatório, prefiro ruby para o formato JSON. Muito mais que um script awk , mas mais fácil de ampliá-lo depois:

ruby -rjson -nae 'BEGIN{j={}};j["Memory"]="#{(100*$F[2].to_f/$F[1].to_f).to_i}%"if/^Mem/;END{puts j.to_json}' <(free -m)
    
por 26.03.2013 / 09:18
0

Com uma uma linha:

awk '$1=="MemTotal:"{t=$2} $1=="MemFree:"{f=$2}END{printf "{2Memory2:2%s2}\n",  int(100 - 100 * f / t)}' /proc/meminfo
    
por 26.03.2013 / 12:38

Tags