Сначала сделайте источник действительным json, удалив запятую в строке с третьей по последнюю.
После этого мы можем начать с конца и вернуться обратно. Желаемый результат может быть получен с использованием формата @csv jq. Это, в свою очередь, требует, чтобы выходные данные были в массиве. (См. Раздел руководства под названием «Форматирование строк и экранирование».) Поэтому нам нужно, чтобы данные выглядели так.
jq -r '["GeoIP","1.5.0"] | @csv'
Один из способов сделать это - поместить каждый элемент в свой собственный массив и добавить массивы вместе. (См. раздел под названием «Добавление».)
jq -r '["GeoIP"] + [.[] | .GeoIP[].version] | @csv'
Поскольку map(x)
определяется как [.[] | x]
, вы можете сказать это вместо этого.
jq -r '["GeoIP"] + map(.GeoIP[].version) | @csv'
Вы можете использовать переменную, чтобы указать желаемое имя пакета следующим образом.
jq -r --arg "package" "GeoIP" '[$package] + map(.[$package][].version) | @csv'
Обновление
В моем исходном решении есть ненужные шаги. Массив можно сделать так:
jq -r '[ "GeoIP", .[].GeoIP[].version ] | @csv'
Или, используя переменную
jq -r --arg "package" "GeoIP" '[$package,(.[] | .[$package][].version)]| @csv'