Как я могу использовать jq , чтобы квалифицировать фильтры только для некоторых ключевых значений и изменить иерархию?
это входные данные из журнала Ansible:
(формат журнала был задан переменной env ANSIBLE_STDOUT_CALLBACK=json
)
Я хочу связать name
с msg
, но только для хоста 192.169.1.170
.
{
"plays": [
{
"tasks": [
{
"hosts": {
"192.169.1.70": {
"msg": "inventory_hostname:192.169.1.70:"
},
"dontcare": {
"msg": "dont want to see this:"
}
},
"task": {
"name": "debug inventory_hostname"
}
},
{
"hosts": {
"192.169.1.70": {
"msg": "All items completed"
}
},
"task": {
"name": "install system-level components"
}
}
]
}
]
}
желаемый вывод:
{
"name": "debug inventory_hostname",
"msg": "inventory_hostname:192.169.1.70:"
},
{
"name": "install system-level components",
"msg": "All items completed"
}
Я могу извлечь некоторые данные, но не могу вложить MSG-сообщение узла-брата и не могу ограничить свой поиск только интересующим меня хостом, 192.169.1.70
:
jq '.plays[] | .tasks[] | .task,.hosts' ansible.json
{
"name": "debug inventory_hostname"
}
{
"192.169.1.70": {
"msg": "inventory_hostname:192.169.1.70:"
},
"dontcare": {
"msg": "dont want to see this:"
}
}
{
"name": "install system-level components"
}
{
"192.169.1.70": {
"msg": "All items completed"
}
}
Всякий раз, когда я пытаюсь что-то квалифицировать для ключа хоста, который я хочу, .hosts["192.169.1.170"]
или .hosts.192.169.1.170
или .hosts{"192.169.1.170"}
, .hosts("192.169.1.170")
, я получаю либо null
или ошибки компиляции. Большая часть примера jq-кода касается фильтрации массивов, а не доступа к хэш-картам / словарям.
И как бы я взял данные родственного брата для имени и ввел бы тот же объект, что и выше?