我在这里粘贴了一个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