以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

如果awk不强制使用,我更喜欢rubyJSON 格式。比裸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

相关内容