使用 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

相關內容