json 형식으로 출력

json 형식으로 출력

다음 명령은 일반적인 형식의 메모리 사용량을 제공합니다.

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

유효한 json 형식으로 가져오고 싶습니다.

예상 출력:
예:

{"Memory":"80"}

답변1

아마도 이와 같이 proc fs에서 정보를 읽고 bc를 사용하여 계산할 수 있습니다.

#!/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'"}'

답변2

강제하지 않으면 JSON 형식을 awk선호합니다 ruby. 기본 awk스크립트보다 훨씬 길지만 나중에 확장하기가 더 쉽습니다.

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)

답변3

사용jo주어진 값 과 계산 Memory된 키 및 사용된 메모리 비율을 사용하여 단일 JSON 객체를 생성합니다 .freeawk

jo Memory="$(free -m| awk '/^Mem:/ { printf "%u%%\n", 100*$3/$2 }')"

출력에 사용된 단위는 free중요하지 않습니다.

출력 예:

{"Memory":"5%"}

동등한 것이지만 다음을 사용합니다 jq.

jq -nc --arg memused "$(free | awk '/^Mem:/ { printf "%u%%\n", 100*$3/$2 }')" '{ Memory: $memused }'

답변4

그리고한 줄:

awk '$1=="MemTotal:"{t=$2} $1=="MemFree:"{f=$2}END{printf "{\042Memory\042:\042%s\042}\n",  int(100 - 100 * f / t)}' /proc/meminfo

관련 정보