我想创建一个 bash 脚本,将其他脚本的输出(通常是简单文本)转换为有效的 json 格式。我该怎么做?
例子:
awk '/^Mem/ {printf("%u%%", 100*$3/$2);}' <(free -m)
命令给我已使用的内存。我希望以有效的 Jason 格式获取输出。
期望输出:
{“Memory”:”80”}
答案1
free -k | { read
read TITLE TOTAL USED REST
echo "{\"Memory\":\"$(( 100 * $USED / $TOTAL ))\"}"
}
free 的输出通过管道传输到由以下部分组成的复合命令:
第一个“read”,跳过“free”的第一个输出行。
第二个“read”,读取我们需要的行,我们只需要第二个和第三个值。echo,
以您想要的格式打印行,包括计算
答案2
以下是内存的一个示例:
echo {\"Memory\":\"$(awk '/^Mem/ {printf("%u", 100*$3/$2);}' <(free -m))\"} > mem.json
将新文件名放入 json:
echo {\"file\":\"$(ls mem.json)\"} > filename.json
或者:
echo {\"<paramName-here>\":\"$(<value-of-param-from-command-here>)\"} > mem.json
当它变得比这更复杂时,您可以继续逐行编写,或者更有可能在变量中构建字符串。
答案3
我创建了一个名为的工具jc
,可以转换许多命令行工具的输出,包括free
json:
$ jc free | jq
[
{
"type": "Mem",
"total": 3993360,
"used": 293248,
"free": 3185992,
"shared": 1196,
"buff_cache": 514120,
"available": 3465280
},
{
"type": "Swap",
"total": 2097148,
"used": 0,
"free": 2097148
}
]