我正在编写一些bash脚本来帮助自动管理AWS资源。我正在使用aws-cli
和jq
,到目前为止,情况非常好。
我使用自定义标记标记我的资源。在某些情况下,我希望根据自定义标记的Key
和Value
过滤资源列表。但是我在制定一个简洁的jq
查询时遇到了麻烦。
因此,例如,如果我的ec2实例的(修剪过的)JSON输出如下:
[
{
"PublicIpAddress": "11.22.33.44",
"PrivateIpAddress": "55.66.77.88",
"Tags": [
{
"Value": "live199.blah.com",
"Key": "Name"
},
{
"Value": "live-standalone",
"Key": "hc-class"
}
]
}
]
[
{
"PublicIpAddress": "111.222.333.444",
"PrivateIpAddress": "555.666.777.888",
"Tags": [
{
"Value": "staging99.blah.com",
"Key": "Name"
},
{
"Value": "staging-standalone",
"Key": "hc-class"
}
]
}
]
...我需要找到Tags.Key == "hc-class"
和Tags.Value = "staging-standalone"
的条目,如何使用jq
以简洁的方式完成?
非常感谢任何帮助。
答案 0 :(得分:2)
对于给定的输入,以下过滤器产生输出,如下所示:
.[] | select(any(.Tags[]; .Key == "hc-class" and .Value == "staging-standalone"))
输出:
{
"PublicIpAddress": "111.222.333.444",
"PrivateIpAddress": "555.666.777.888",
"Tags": [
{
"Value": "staging99.blah.com",
"Key": "Name"
},
{
"Value": "staging-standalone",
"Key": "hc-class"
}
]
}
答案 1 :(得分:0)
我对JQ很新,但我觉得我有一个解决方案:
https://jqplay.org/s/DljtxNX_72
select((.[0].Tags[1].Key) == "hc-class" and (.[0].Tags[1].Value) == "staging-standalone")