2017-09-12 13 views
0

私は出力のすべてのKey、Valueを使用して、別のコマンドにパイプしています。ここで は、私が使用しようとしているものです:jq key、各シェルスクリプトの値

INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) 
aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" 

を上記のコマンドを使用すると、私は次の出力があります。今、私はパイプにしたい

{ 
"Tags": [ 
    { 
     "ResourceType": "instance", 
     "ResourceId": "i-0342a609edf80001a", 
     "Value": "A-VALUE", 
     "Key": "A-KEY" 
    }, 
    { 
     "ResourceType": "instance", 
     "ResourceId": "i-0342a609edf80001a", 
     "Value": "B-VALUE", 
     "Key": "B-KEY" 
    }, 
    { 
     "ResourceType": "instance", 
     "ResourceId": "i-0342a609edf80001a", 
     "Value": "C-VALUE", 
     "Key": "C-KEY" 
    }, 
    { 
     "ResourceType": "instance", 
     "ResourceId": "i-0342a609edf80001a", 
     "Value": "D-VALUE", 
     "Key": "D-KEY" 
    }, 
    { 
     "ResourceType": "instance", 
     "ResourceId": "i-0342a609edf80001a", 
     "Value": "E-VALUE", 
     "Key": "E-KEY" 
    }, 
    { 
     "ResourceType": "instance", 
     "ResourceId": "i-0342a609edf80001a", 
     "Value": "F-VALUE", 
     "Key": "G-KEY" 
    }, 
    { 

次のコマンドの各キー、値:

aws ec2 create-tags --resources XXXXX --tags Key=H-KEY,Value=H-VALUE 

ここで、キー、値の量と値は可変です。だから私は "それぞれのために"必要と信じています。

私を助けてもらえますか?

それはのようだ:各キー、値の場合は、実行します。

aws ec2 create-tags --resources XXXXX --tags Key=A-KEY,Value=A-VALUE 
aws ec2 create-tags --resources XXXXX --tags Key=B-KEY,Value=B-VALUE 
aws ec2 create-tags --resources XXXXX --tags Key=C-KEY,Value=C-VALUE 
aws ec2 create-tags --resources XXXXX --tags Key=N...-KEY,Value=N...-VALUE 
+0

、私はキー、値を取得する:あなたは、「AWS」で始まるキーを削除するフィルタを「選択」を追加する必要があります値= $ INSTANCE_ID " - 地域$地域| jq -r '.Tags [] | "\(。キー)\(。値)" ' 今、ループする必要がありますか? – Thiago

答えて

4

が正しくシェルの引用された出力値に@sh directiveを持っている:あなたの入力を考えると

aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" \ 
| jq -r '.Tags[] | @sh "aws ec2 create-tags --resources XXXXX --tags Key=\(.Key),Value=\(.Value)"' 

、これは

を出力
aws ec2 create-tags --resources XXXXX --tags Key='A-KEY',Value='A-VALUE' 
aws ec2 create-tags --resources XXXXX --tags Key='B-KEY',Value='B-VALUE' 
aws ec2 create-tags --resources XXXXX --tags Key='C-KEY',Value='C-VALUE' 
aws ec2 create-tags --resources XXXXX --tags Key='D-KEY',Value='D-VALUE' 
aws ec2 create-tags --resources XXXXX --tags Key='E-KEY',Value='E-VALUE' 
aws ec2 create-tags --resources XXXXX --tags Key='G-KEY',Value='F-VALUE' 

コマンドを実行してにパイプする:

aws ec2 describe-tags ... | jq -r ... | sh 

JQはかなり冒険です。 、AWS EC2は - フィルタを使用「名前=リソース-IDタグについて説明します。それに

jq -r ' 
    .Tags[] | 
    select(.Key | test("^aws:") | not) | 
    @sh "aws ... --tags Key=\(.Key),Value=\(.Value)" 
' 
+0

それは働いた!どうもありがとう! ただし、最後の詳細は1つ必要です: "Key"で始まるキーは無視できますか? "aws:***"? – Thiago

関連する問題