Если вам разрешено хранить секреты на жестком диске, вы можете использовать ключи в домашней папке.ssh, чтобы пропустить аутентификацию по паролю. Именно такой должна быть не -интерактивная аутентификация от машины к машине.
Ваша команда перебирает каждый из элементов массива для каждого из четырех указанных вами элементов, поэтому вместо получения трех объектов вы получаете 3 4 = 81 объект.
Чтобы выполнить итерацию по каждому объекту, вы можете использовать map()
функцию, например:
jq 'map({IP:.ip, STATUS:.status, SOFTWARE:.info.software.version, KERNEL:.info.kernel})' json.data
[
{
"IP": "10.240.82.192",
"STATUS": "PASS",
"SOFTWARE": "1.0.0",
"KERNEL": "5.0.0"
},
{
"IP": "10.240.82.193",
"STATUS": "PASS",
"SOFTWARE": "1.0.0",
"KERNEL": "5.0.3"
},
{
"IP": "10.240.82.194",
"STATUS": "PASS",
"SOFTWARE": "1.0.2",
"KERNEL": "5.0.1"
}
]
Ответ @roaima хорошо объясняет это, в качестве альтернативы вы можете написать решение следующим образом:
jq '[.[] | {IP:.ip, STATUS:.status, SOFTWARE:.info.software.version, KERNEL:.info.kernel} ]' json.data
Здесь часть .[]
выполняет итерацию по всем элементам ввода, а внешняя часть []
, обертывающая весь результат, преобразует его в массив.