在不使用jq的情况下将带过滤器的AWS CLI命令输出到CSV

时间:2018-12-14 22:13:21

标签: amazon-web-services aws-cli

是否可以将带有过滤器的AWS cli输出为csv格式?

例如,如果我想接受此命令并输出到csv:

aws ec2 describe-images --owner self   --query 'Images[*].{ID:ImageId,"Virtualization Type":VirtualizationType}'

我该怎么做?通常我会使用jq将aws cli输出到csv。但是在这种情况下,我可以使用filter选项而不是jq来轻松获得所需的信息。

这是我要输出到CSV的完整命令:

aws ec2 describe-images --owner self   --query 'Images[*].{ID:ImageId,"Virtualization Type":VirtualizationType,Architechture:Architecture,Hypervisor:Hypervisor,State:State,ImageID:ImageId,"Device Names":BlockDeviceMappings[].DeviceName,"Snapshot IDs":BlockDeviceMappings[].Ebs.SnapshotId,"Delete On Termination":BlockDeviceMappings[].Ebs.DeleteOnTermination,"Voluem Type":BlockDeviceMappings[].Ebs.VolumeType,"Volume Size":BlockDeviceMappings[].Ebs.VolumeSize,Encrypted:BlockDeviceMappings[].Ebs.Encrypted,"Image Location":ImageLocation,"Root Device Type":RootDeviceType,"Owner ID":OwnerId,"Creation Date":CreationDate,Public:Public,"Image Type":ImageType,Name:Name}'

2 个答案:

答案 0 :(得分:2)

我可以想到的一种解决方案是输出文本--output text,然后用逗号替换空格:

aws ec2 describe-images --owner self   --query 'Images[*].{ID:ImageId,"Virtualization Type":VirtualizationType}' --output text

输出

ami-1234567890    hvm
ami-1a2b3c4d5e    hvm
ami-9876543210    hvm

用逗号替换空格。使用sedtrawkpaste可以有很多方法。

aws ec2 describe-images --owner self   --query 'Images[*].{ID:ImageId,"Virtualization Type":VirtualizationType}' --output text | sed -E 's/\s+/,/g'

输出

ami-1234567890,hvm
ami-1a2b3c4d5e,hvm
ami-9876543210,hvm

答案 1 :(得分:0)

我们今天不得不做一些非常相似的事情,我们使用 jq 来获取本地的 csv 输出。因为 json 是引用的,所以我们不得不使用 tr 去掉引号:

aws ec2 describe-instances --output json --query 'foo' | \
  jq '.[][] | @csv' | \
  tr -d '"'

如果您的任何值中包含双引号,则上述 tr 锤子会弄乱该输出。

  • 注意:我们需要 .[][] 表示法,因为我们的查询正在以特定方式重新格式化输出。我不希望大多数情况下都需要以相同的方式引用输出。