2016-10-05 59 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'' –