Bash скрипт, который конвертирует любой вывод (текст) в форму json

Я хочу создать bash-скрипт, чтобы он преобразовывал выходные данные других скриптов (обычно простой текст) в правильную форму json. Как я могу это сделать ?

Пример: команда

awk '/^Mem/ {printf("%u%%", 100*$3/$2);}' <(free -m)

возвращает мне использованную память. Я хочу получить вывод в действительной форме Джейсона.

Желаемый выход:

 {“Memory”:”80”}
3
задан 26 March 2013 в 10:23

3 ответа

Вот пример для памяти:

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 

Когда оно становится больше Сложнее, чем это, вы можете продолжать писать построчно или, более вероятно, строить строки в переменной.

0
ответ дан 26 March 2013 в 10:23
free -k | { read 
    read TITLE TOTAL USED REST
    echo "{\"Memory\":\"$(( 100 * $USED / $TOTAL ))\"}"
}

Вывод free передается на составную команду, состоящую из:
Первое чтение, которое пропускает первую строку вывода free Второе «чтение», которое читает нужную нам строку, нам нужно только второе и третье значение.
Эхо, которое печатает строку в нужном вам формате, включая вычисление

0
ответ дан 26 March 2013 в 10:23

Я создал инструмент, названный 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"
  }
]
0
ответ дан 17 November 2019 в 10:02

Другие вопросы по тегам:

Похожие вопросы: