将任何输出(文本)转换为 JSON 格式的 Bash 脚本

将任何输出(文本)转换为 JSON 格式的 Bash 脚本

我想创建一个 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,可以转换许多命令行工具的输出,包括freejson:

$ 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
  }
]

https://github.com/kellyjonbrazil/jc

相关内容