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

関連情報