如何告诉 jq 从 aws ec2 cli 打印多个字段(键)
How to tell jq to print multiples fields(keys) from aws ec2 cli
运行 aws ec2 describe-instances 将 return 类似于以下内容的 json 文本:
{
"Reservations": [
{
"Instances": [
"PublicDnsName": "ec2..."
"VpcId": "vpc-...",
...
"Instances": [
我知道对于每个 "Instance" 我可以使用 jq 提取单个字段的内容,例如 PublicDnsName,如下所示:
jq '.Reservations[].Instances[].PublicDnsName'
这将列出我的实例的 dns 名称
但是我如何提取两个或更多字段并用 space 或逗号或其他东西分隔它们?我希望为每个实例并排列出 PublicDnsName 和 VpcId。
具体来说,我要查找的是 VpcId 为空、未定义或不存在的实例列表。换句话说,我想要一个我的经典实例列表,我需要通过 api 来处理结果。
单独使用 AWS CLI
我喜欢 jq,它与 aws cli 结合使用真的很有帮助,但在您的情况下,您已经可以简单地使用 aws cli 做很多事情。
But how do I extract two or more fields and separate them by a space or comma or something? I want PublicDnsName and VpcId to be listed side-by-side for each Instance.
aws ec2 describe-instances --query '
Reservations[*].Instances[].{PublicDnsName:PublicDnsName,VpcId:VpcId}' --output text
Specifically what I'm looking for is a list of instances where VpcId is null, undefined, or non-existent
如果您搜索空的 VpcId,以下将起作用:
aws ec2 describe-instances --query '
Reservations[].Instances[?VpcId==``].[PublicDnsName]' --output text
与jq
一起工作
因为原问题是
How to tell jq to print multiples fields(keys) from 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"
运行 aws ec2 describe-instances 将 return 类似于以下内容的 json 文本:
{
"Reservations": [
{
"Instances": [
"PublicDnsName": "ec2..."
"VpcId": "vpc-...",
...
"Instances": [
我知道对于每个 "Instance" 我可以使用 jq 提取单个字段的内容,例如 PublicDnsName,如下所示:
jq '.Reservations[].Instances[].PublicDnsName'
这将列出我的实例的 dns 名称
但是我如何提取两个或更多字段并用 space 或逗号或其他东西分隔它们?我希望为每个实例并排列出 PublicDnsName 和 VpcId。
具体来说,我要查找的是 VpcId 为空、未定义或不存在的实例列表。换句话说,我想要一个我的经典实例列表,我需要通过 api 来处理结果。
单独使用 AWS CLI
我喜欢 jq,它与 aws cli 结合使用真的很有帮助,但在您的情况下,您已经可以简单地使用 aws cli 做很多事情。
But how do I extract two or more fields and separate them by a space or comma or something? I want PublicDnsName and VpcId to be listed side-by-side for each Instance.
aws ec2 describe-instances --query '
Reservations[*].Instances[].{PublicDnsName:PublicDnsName,VpcId:VpcId}' --output text
Specifically what I'm looking for is a list of instances where VpcId is null, undefined, or non-existent
如果您搜索空的 VpcId,以下将起作用:
aws ec2 describe-instances --query '
Reservations[].Instances[?VpcId==``].[PublicDnsName]' --output text
与jq
一起工作
因为原问题是
How to tell jq to print multiples fields(keys) from 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"