По сути, вы хотите создать массив, состоящий из нужных вам значений:
$ jq '.data[].event | [.num, .hostame, .ip, .locations]' tmp.json
[
1,
null,
"127.0.1",
[
"UK",
"site1"
]
]
[
3,
null,
"127.0.2",
[
"UK",
"site2"
]
]
Оттуда это вопрос форматирования. Сначала давайте превратим список местоположений в одну строку:
$ jq '.data[].event | [.num, .hostame, .ip, <b>(.locations|join(","))</b>]' tmp.json
[
1,
null,
"127.0.1",
"UK,site1"
]
[
3,
null,
"127.0.2",
"UK,site2"
]
Затем давайте объединим эти строки в строку, разделенную ", "
.
$ jq '.data[].event | [.num, .hostame, .ip, (.locations|join(","))]<b> | join(", ")</b>' tmp.json
"1, , 127.0.1, UK,site1"
"3, , 127.0.2, UK,site2"
Наконец, вы можете использовать флаг -r
для вывода необработанного текста, а не строковое значение JSON.
$ jq <b>-r</b> '.data[].event | [.num, .hostame, .ip, (.locations|join(","))] | join(", ")' tmp.json
1, , 127.0.1, UK,site1
3, , 127.0.2, UK,site2