как улучшить вывод JQ - PullRequest
       10

как улучшить вывод JQ

0 голосов
/ 25 августа 2018

У меня есть файл JSON. Простой пример выглядит так:

[
{
  "host": "a.com",
  "ip": "1.2.2.3",
  "port": 8,
  "name":"xyz"
},
{
  "host": "b.com",
  "ip": "2.5.0.4",
  "port": 3,
  "name":"xyz"

},
{
  "host": "c.com",
  "ip": "9.17.6.7",
  "port": 4,
  "name":"xyz"
}
]

Я хочу извлечь значения "host" и "ip" и добавить их в файл значений, разделенных запятыми. Каждая запись в строке выглядит следующим образом:

a.com,1.2.2.3
b.com,2.5.0.4
c.com,9.17.6.7

Я установил библиотеку jq для разбора файла json. Я выполнил эту команду:

cat test.json | jq '.[] | {host: .host, ip: .ip}'

Вывод, который я получаю, следующий:

{
  "host": "a.com",
  "ip": "1.2.2.3"
}
{
  "host": "b.com",
  "ip": "2.5.0.4"
}
{
  "host": "c.com",
  "ip": "9.17.6.7"
}

Есть ли способ извлечь вывод, как я хочу? Этот вывод, который произвел jq, требует дополнительного скрипта для его анализа и сохранения значений по своему усмотрению в формате csv, по одному элементу в строке.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Чтобы удалить кавычки:

$ cat test.json | jq -r '.[] | [ .host, .ip ] | @csv' | sed 's/"//g'
a.com,1.2.2.3
b.com,2.5.0.4
c.com,9.17.6.7

Если используется OS X, используйте Homebrew для установки GNU sed.

0 голосов
/ 25 августа 2018

Используйте формат @csv для получения CSV-вывода из массива значений.

cat test.json | jq -r '.[] | [.host, .ip] | @csv'

Параметр -r необходим для получения необработанного вывода, а не JSON, который обернул бы дополнительный набор кавычек вокруг результата и исключил бы кавычки, окружающие каждое поле.

...