2016-10-05 60 views
0

運行AWS EC2描述,實例將返回類似下面這樣的JSON文本打印倍數字段(鍵):如何分辨JQ從AWS EC2 CLI

{ 
    "Reservations": [ 
     { 
      "Instances": [ 
        "PublicDnsName": "ec2..." 
        "VpcId": "vpc-...", 
         ... 
      "Instances": [ 

我知道每個「實例」我可以使用jq提取單個字段的內容,例如PublicDnsName,如下所示: jq '.Reservations[].Instances[].PublicDnsName'這將列出我的實例的dns名稱 但是,如何提取兩個或多個字段並用空格或逗號分隔它們?我想爲每個實例並列列出PublicDnsName和VpcId。

具體而言,我正在尋找的是VpcId爲空,未定義或不存在的實例列表。換句話說,我想要一個我的經典實例的列表,我需要通過api來處理結果。

回答

3

與AWS CLI單獨

我愛JQ,它的的確確是有利於與AWS CLI相結合,而只是與AWS你的情況,你已經可以做很多CLI中操作。

但是,如何提取兩個或多個字段並用空格或逗號分隔它們?我想爲每個實例並列列出PublicDnsName和VpcId。

aws ec2 describe-instances --query ' 
    Reservations[*].Instances[].{PublicDnsName:PublicDnsName,VpcId:VpcId}' --output text 

具體是什麼我要找的是實例的一個列表,其中VpcId爲null,未定義或不存在的

如果搜索空VpcId,下面將工作:

aws ec2 describe-instances --query ' 
    Reservations[].Instances[?VpcId==``].[PublicDnsName]' --output text 

jq

工作

由於原來的問題是,從

如何告訴JQ打印倍數字段(鍵)AWS EC2 CLI

相信你一定能jq工作,你可以得到多個字段被以下用逗號分隔

aws ec2 describe-instances |\ 
    jq '.Reservations[].Instances[].PublicDnsName, .Reservations[].Instances[].VpcId' 

您可以通過分解Reservations[].Instances更好的寫:

aws ec2 describe-instances |\ 
    jq '.Reservations[].Instances[] | .PublicDnsName, .VpcId' 

和JQ支持轉化爲CSV,但它需要採取一個數組,並避免與雙引號的問題,您可以用原始數據的工作:

aws ec2 describe-instances |\ 
    jq -r '.Reservations[].Instances[] 
     | [.PublicDnsName, .VpcId] 
     | @csv' 

在後的將不僅僅是產品預期的結果:

"ec2-some_id_region.amazonaws.com","vpc-some_other_id" 
+0

感謝您的信息。通過'|分解它.PublicDnsName,.VpcId'適用於我。 –

+0

另一個有用的變體: 'aws ec2 describe-instances | jq -r'.Reservations []。Instances [] | [.PrivateDnsName,.VpcId,。PublicDnsName] | @ tsv'' –