2016-04-27 18 views
0

我需要遍歷(AWS實例ID的數組)的數組,然後將標籤拉出並使用jq將它們添加到數組中。jq - in for loop,創建一個新數組,然後添加鍵/值對

我有變量定義我的需求。在這種情況下:

VolumeId 
Tag1Value 
Tag2Value 
Tag3Value 

它們隨着我在for循環中迭代而改變。我知道如何創建一個新的陣列:

jq -n --arg v "$VolumeId" '[{"VolumeId": $v}]' 

但是,這會每次創建一個新的JSON數組。我需要創建一次,然後在循環中進行追加。

我找的輸出是一個新創建的JSON數組:

[ 
    { 
    "VolumeId": $VolumeId, 
    "Tag1": $Tag1Value, 
    "Tag2": $Tag2Value, 
    "Tag3": $Tag3Value 
    }, 
    { 
    "VolumeId": $VolumeId, 
    "Tag1": $Tag1Value, 
    "Tag2": $Tag2Value, 
    "Tag3": $Tag3Value 
    }, 
    { 
    "VolumeId": $VolumeId, 
    "Tag1": $Tag1Value, 
    "Tag2": $Tag2Value, 
    "Tag3": $Tag3Value 
    } 
] 

任何幫助非常感謝。

回答

1

這裏是示出如何值的流(這裏,陣列的流)可被組合成一個JSON數組對象的示例:

(cat << EOF 
["VolumeId1", "Tag1Value1", "Tag2Value1", "Tag3Value1"] 
["VolumeId2", "Tag1Value2", "Tag2Value2", "Tag3Value2"] 
["VolumeId3", "Tag1Value3", "Tag2Value3", "Tag3Value3"] 
EOF 
) | jq -s 'map({VolumeId: .[0], Tag1Value: .[1], Tag2Value: .[2], Tag3Value: .[3] }) ' 

輸出:

[ 
    { 
    "VolumeId": "VolumeId1", 
    "Tag1Value": "Tag1Value1", 
    "Tag2Value": "Tag2Value1", 
    "Tag3Value": "Tag3Value1" 
    }, 
    { 
    "VolumeId": "VolumeId2", 
    "Tag1Value": "Tag1Value2", 
    "Tag2Value": "Tag2Value2", 
    "Tag3Value": "Tag3Value2" 
    }, 
    { 
    "VolumeId": "VolumeId3", 
    "Tag1Value": "Tag1Value3", 
    "Tag2Value": "Tag2Value3", 
    "Tag3Value": "Tag3Value3" 
    } 
] 
+0

由於@peak ,它的工作原理,但有一個問題。當我遍歷一個for循環時...我每次都得到新的數組。任何方式來使它1陣列? – user6127511

+0

這個想法是將整個「for」循環的輸出傳遞給jq。沿着(for ...; do ... done)的路線行進jq -s ... – peak

+0

另外(並且對於不清楚我的原始問題表示歉意),我需要將新數組分配給一個變量,以便稍後將其與另一個數組合並。 '| new_array = $(jq -s'map({VolumeId:。[0] ....'不起作用 – user6127511