使用jq查找基于另一个键值对的键值对



我在这里粘贴了一个JSON示例数据,它需要一些操作才能获得所需的输出,这将在这段JSON代码之后的下一节中提到。

我想使用jq来解析我想要的数据。

{
"MetricAlarms": [
    {
        "EvaluationPeriods": 3,
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "AlarmActions": [
            "Unimportant:Random:alarm:ELK2[10.1.1.2]-Root-Disk-Alert"
        ],
        "AlarmName": "Unimportant:Random:alarm:ELK1[10.1.1.0]-Root-Alert",
        "Dimensions": [
            {
                "Name": "path",
                "Value": "/"
            },
            {
                "Name": "InstanceType",
                "Value": "m5.2xlarge"
            },
            {
                "Name": "fstype",
                "Value": "ext4"
            }
        ],
        "DatapointsToAlarm": 3,
        "MetricName": "disk_used_percent"
    },
    {
        "EvaluationPeriods": 3,
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "AlarmActions": [
            "Unimportant:Random:alarm:ELK2[10.1.1.2]"
        ],
        "AlarmName": "Unimportant:Random:alarm:ELK2[10.1.1.2]",
        "Dimensions": [
            {
                "Name": "path",
                "Value": "/"
            },
            {
                "Name": "InstanceType",
                "Value": "r5.2xlarge"
            },
            {
                "Name": "fstype",
                "Value": "ext4"
            }
        ],
        "DatapointsToAlarm": 3,
        "MetricName": "disk_used_percent"
    }
]
}

所以当我传递一些Key1&value1作为参数"Name":"InstanceType",到JQ,可能使用cat|JQ,预期输出应如下

m5.2xlarge
r5.2xlarge

递归搜索输入中的键值对(sk-sv(并从找到的对象中提取另一个键值(pv(的通用方法:

jq -r --arg sk Name         
      --arg sv InstanceType 
      --arg pv Value        
'.. | objects | select(contains({($sk): $sv})) | .[$pv]' file

相关内容

最新更新