다음 명령은 일반적인 형식의 메모리 사용량을 제공합니다.
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 객체를 생성합니다 .free
awk
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