Используя jq найти пару ключ / значение на основе другой пары ключ / значение - PullRequest
0 голосов
/ 05 марта 2020

Я вставляю сюда примерные данные JSON, которые потребовали бы некоторых манипуляций для получения желаемого результата, который упоминается в следующем разделе для чтения после этого фрагмента кода JSON.

I Я хочу использовать 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

1 Ответ

1 голос
/ 05 марта 2020

Универсальный c подход к поиску пары ключ-значение (sk - sv) при рекурсивном вводе и извлечению значения другого ключа (pv) из найденных объектов:

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