我有一个json,如下所示:
[
{
"AvailabilityZone": "ap-northeast-1a",
"Tags": [
{
"Value": "value1",
"Key": "key1"
},
{
"Value": "value2",
"Key": "key2"
}
],
},
{
"AvailabilityZone": "ap-northeast-1a",
"Tags": [
{
"Value": "value3",
"Key": "key3"
},
{
"Value": "value4",
"Key": "key4"
}
],
},
]
当我从键盘输入键和值时。我只想通过jq选项使用键和值输出正确的结果。
示例:我输入Key:value为key3:value3。我的愿望:
{
"AvailabilityZone": "ap-northeast-1a",
"Tags": [
{
"Value": "value3",
"Key": "key3"
},
{
"Value": "value4",
"Key": "key4"
}
],
}
答案 0 :(得分:1)
似乎您正在使用aws cli来获取ebs卷详细信息,可以使用aws cli的filter属性来过滤查询结果。
您可以在这里使用以下内容:
aws ec2 describe-volumes --filters Name=tag-key,Values="key3" Name=tag-value,Values="value3"
在以下位置找到更多帮助:
aws ec2 describe-volumes help
我认为这比使用jq过滤要容易。
答案 1 :(得分:1)
使用select过滤标签下的数组:
jq '.[].Tags | select((.[].Key == "key3") and (.[].Value="value3")) ' < file.json
从标准输入中读取键和值:
echo key3 value3 | (
read key value
k=$key v=$value jq ".[].Tags
| select((.[].Key == env.k) and (.[].Value=env.v))
" < file.json)