以下命令以正常形式给出内存使用情况。
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
如果awk
不强制使用,我更喜欢ruby
JSON 格式。比裸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一行:
awk '$1=="MemTotal:"{t=$2} $1=="MemFree:"{f=$2}END{printf "{\042Memory\042:\042%s\042}\n", int(100 - 100 * f / t)}' /proc/meminfo