Json jq-筛选不包含的实例不起作用

Json jq-筛选不包含的实例不起作用,json,amazon-web-services,jq,Json,Amazon Web Services,Jq,我正在尝试筛选AWS环境中当前正在运行的实例。我正在使用jq筛选实例: INSTANCE_METADATA=$(aws ec2 --profile $ACCOUNT describe-instances | jq --arg env $ENVIRONMENT '.Reservations|map(select((.Instances[0].Tags[].Value==$env) and (.Instances[0].State.Name=="running") ))') 然

我正在尝试筛选AWS环境中当前正在运行的实例。我正在使用jq筛选实例:

INSTANCE_METADATA=$(aws ec2 --profile $ACCOUNT describe-instances | jq --arg env $ENVIRONMENT '.Reservations|map(select((.Instances[0].Tags[].Value==$env) and (.Instances[0].State.Name=="running") ))')
然后,我将为InstanceId创建一个变量:

RUNNING_INSTANCE_IDS=$(jq -r '.[].Instances[0].InstanceId' <<<"${BEANSTALK_INSTANCE_METADATA}")


这两种方法都无法成功过滤出所讨论的实例。我在这里遗漏了什么?

每次编写
.Tags[]
,您都在迭代
.Tags
,因此您编写选择标准的方式无法达到预期效果

重新格式化查询的一种方法是根据需要使用
any/2
和/或
all/2
。例如,您希望基于.Value的标准可能是(相当于):

例子 为了提高效率,重新排列选择标准是有意义的,因此您可能会得到如下结果:

.Reservations
| map(select(.Instances[0]
             | ( .State.Name=="running" and
                 any(.Tags[]; .Value==$env) and
                 all(.Instances[0].Tags[].Value;
                     contains("NFTPerformanceTest")|not) )))

每次编写
.Tags[]
时,您都在迭代
.Tags
,因此编写选择条件的方式无法达到预期效果

重新格式化查询的一种方法是根据需要使用
any/2
和/或
all/2
。例如,您希望基于.Value的标准可能是(相当于):

例子 为了提高效率,重新排列选择标准是有意义的,因此您可能会得到如下结果:

.Reservations
| map(select(.Instances[0]
             | ( .State.Name=="running" and
                 any(.Tags[]; .Value==$env) and
                 all(.Instances[0].Tags[].Value;
                     contains("NFTPerformanceTest")|not) )))

是否可以添加未过滤的<代码> AWS/COD>输出的相关摘录?考虑使用<代码>查询< /代码>参数对服务器进行过滤。可以添加未过滤的<代码> AWS/COD>输出的相关摘录吗?考虑使用<代码>查询< /代码>参数对服务器进行过滤。
all(.Instances[0].Tags[].Value; 
    contains("NFTPerformanceTest")|not)
.Reservations
| map(select(.Instances[0]
             | ( .State.Name=="running" and
                 any(.Tags[]; .Value==$env) and
                 all(.Instances[0].Tags[].Value;
                     contains("NFTPerformanceTest")|not) )))