是否可以将带有过滤器的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}'
答案 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
用逗号替换空格。使用sed
或tr
或awk
或paste
可以有很多方法。
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 锤子会弄乱该输出。
.[][]
表示法,因为我们的查询正在以特定方式重新格式化输出。我不希望大多数情况下都需要以相同的方式引用输出。