Иллюстративный вывод недопустим как JSON и содержит объекты с повторяющимися ключами, что, вероятно, не то, что вы на самом деле хотите, но следующая программа jq выдаст вывод, который соответствует общему описанию проблемы.Поскольку вы, похоже, не указали точный критерий группировки, я взял текст сообщения об ошибке после последнего ":" в качестве критерия группировки.(Если, например, вы хотите рассмотреть текст после первого «:», используйте «^ [^:] *: *» в качестве регулярного выражения.)
Первый шаг собирает .failed_projects
вместеи применяется to_entries
, чтобы мы могли легко получить доступ к идентификатору и тексту сообщения об ошибке:
[.[] | .failed_projects | to_entries[]]
Далее мы извлекаем критерий группировки и используем его для формирования групп:
| map(.value |= sub("^.*: *";""))
| group_by(.value)
Наконец, мы преобразуем группы в объекты JSON в форме: {GROUP: ARRAY_OF_IDs}:
| map( .[0].value as $key
| [.[] | .key] as $value
| {($key): $value} )
Объединение вышеуказанных фрагментов в файл program.jq и использование вызова:
jq -f program.jq input.json
дает вывод, показанный ниже.Очевидно, вы захотите изменить критерий группировки.Вы также можете преобразовать строки идентификаторов в числа JSON, что можно сделать с помощью tonumber
или более осторожно с помощью (tonumber? // .)
.
Чтобы понять файл program.jq, вы можете начать с первого фрагмента., а затем добавьте каждый из остальных по очереди.
Выход
[
{
"Deadline Exceeded, trace": [
"1082"
]
},
{
"TimeoutError)": [
"6728",
"6747",
"6939",
"5570",
"6103",
"6188",
"6695",
"6721",
"2492",
"6760",
"3060",
"6941",
"6942",
"6947",
"7787"
]
},
{
"in `__raise_transport_error'": [
"1273",
"7201"
]
},
{
"in `run_indexer!'\"": [
"7707"
]
}
]