Пройдитесь по json с помощью jq, чтобы получить несколько значений и объединить их в одну строку

Пройдитесь по json с помощью jq, чтобы получить несколько значений и объединить их в одну строку

Я использую jq для получения некоторых данных в нужном формате, полные данные pod в формате json вставлены сюдаhttps://pastebin.com/UMJA7xd5. Эти данные являются одним из pod в формате json. Я собираюсь запустить его на всех pod, чтобы я мог вывести информацию, например,

имя_пода, имя_1-го_контейнера, ограничение_ЦП, ограничение_памяти, имя_2-го_контейнера, ограничение_ЦП, ограничение_памяти--на-основе-на-количество-контейнеров

На основе количества контейнеров в контейнере. Количество контейнеров в контейнерах случайно, в некоторых контейнерах 1, а в некоторых — до 5 контейнеров.

Я могу творить до сих пор.

oc get po -o json | jq -j   '.items[] | "\(.metadata.name), \(.spec.containers[] | .name +" , "+ .resources.limits.cpu +" , "+ .resources.limits.memory)\n" '

что дает мне вывод, как показано ниже:-

kafka-0, kafka , 16 , 16Gi
kafka-0, filebeat , 2 , 256Mi

В приведенном выше примере данных выполняется печать данных двух контейнеров для одного модуля kafka-0. Модуль kafka имеет два контейнера, поэтому выводится две строки.

Ожидаемый результат:

kafka-0, kafka , 16 , 16Gi, filebeat , 2 , 256Mi

Я новичок в jq и перепробовал много вариантов, но не смог добиться успеха, возможно, делаю что-то не так. В этом значении контейнера меняются, поэтому не смог объединить эти строки.

решение1

$ cat test.jq
# Iterate over "items"

.items[] |

# Place each extracted element into an array

[
    # Select elements

    .metadata.name,

    # Use parentheses to group
    ( .spec.containers[] | .name, .resources.limits["cpu","memory"] )
]

# Join the array together

| join(", ")

$ <input jq -r -f test.jq
kafka-0, kafka, 16, 16Gi, filebeat, 2, 256Mi

Связанный контент