Я хочу создать bash-скрипт, чтобы он преобразовывал выходные данные других скриптов (обычно простой текст) в правильную форму json. Как я могу это сделать ?
Пример: команда
awk '/^Mem/ {printf("%u%%", 100*$3/$2);}' <(free -m)
возвращает мне использованную память. Я хочу получить вывод в действительной форме Джейсона.
Желаемый выход:
{“Memory”:”80”}
Вот пример для памяти:
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
Когда оно становится больше Сложнее, чем это, вы можете продолжать писать построчно или, более вероятно, строить строки в переменной.
free -k | { read
read TITLE TOTAL USED REST
echo "{\"Memory\":\"$(( 100 * $USED / $TOTAL ))\"}"
}
Вывод free передается на составную команду, состоящую из:
Первое чтение, которое пропускает первую строку вывода free Второе «чтение», которое читает нужную нам строку, нам нужно только второе и третье значение.
Эхо, которое печатает строку в нужном вам формате, включая вычисление
Я создал инструмент, названный jc
, который преобразовывает вывод многих инструментов командной строки, включая free
к json:
https://github.com/kellyjonbrazil/jc
$ free | jc --free -p
[
{
"type": "Mem",
"total": "2017300",
"used": "213104",
"free": "1148452",
"shared": "1176",
"buff_cache": "655744",
"available": "1622204"
},
{
"type": "Swap",
"total": "2097148",
"used": "0",
"free": "2097148"
}
]