Recorra json usando jq para obtener múltiples valores y fusionarlos en una sola línea

Recorra json usando jq para obtener múltiples valores y fusionarlos en una sola línea

Estoy usando jq para obtener algunos datos en el formato deseado, los datos json completos de un pod se pegan aquíhttps://pastebin.com/UMJA7xd5. Estos datos son uno de los pods en formato json. Voy a ejecutarlo en todos los pods para poder enumerar información como,

nombre-pod, nombre-del-primer-contenedor, límite-de-cpu, límite-de-memoria, nombre-del-segundo-contenedor, límite-de-cpu, límite-de-memoria, etc., según el número de contenedor

Basado en la cantidad de contenedores en un pod. La cantidad de contenedores en las cápsulas es aleatoria, algunas cápsulas tienen 1 o otras tienen hasta 5 contenedores.

Puedo crear hasta aquí.

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

que me dan un resultado como el siguiente: -

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

En los datos del ejemplo anterior, se imprimen datos de dos contenedores para un solo pod kafka-0. Kafka pod tiene dos contenedores, por lo que produce dos líneas.

Resultado Esperado:

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

Soy nuevo en jq y probé muchas opciones, pero no pude hacerlo, es posible que esté haciendo algo mal. En este valor de contenedor son variables, por lo que no se pudieron unir estas líneas.

Respuesta1

$ 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

información relacionada