使用 jq 循环 json 以获取多个值并将它们合并在一行中

使用 jq 循环 json 以获取多个值并将它们合并在一行中

我正在使用 jq 获取所需格式的一些数据,此处粘贴了 pod 的完整 json 数据https://pastebin.com/UMJA7xd5。该数据是json格式的pod之一。我将在所有 Pod 上运行它,以便我可以列出如下信息:

podname,第一个容器名称,CPU 限制,内存限制,第二个容器名称,CPU 限制,内存限制--基于容器数量

基于 Pod 中的容器数量。 Pod 中的容器数量是随机的,有些 Pod 有 1 个,有些 Pod 最多有 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

在上面的示例数据中,为单个 pod kafka-0 打印两个容器的数据。 kafka pod 有两个容器,因此产生两条线。

预期结果:

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

相关内容