我正在尝试使用循环遍历以下json的jq编写查询,并在Name =“efs-docker”的值时返回FileSystemId的值,如果找不到匹配的记录则会跳出脚本。我以为我可以使用foreach循环来完成它,但语法令人困惑。可以使用reduce或select函数来代替吗?
{
"FileSystems": [
{
"SizeInBytes": {
"Value": 6144
},
"Name": "not-docker",
"CreationToken": "console-db868fd6-ed6d-46f8-9e3e-4501293847f5",
"CreationTime": 1440519280.0,
"FileSystemId": "fs-0fdd32a6",
"NumberOfMountTargets": 3,
"LifeCycleState": "available",
"OwnerId": "310444902345"
},
{
"SizeInBytes": {
"Timestamp": 1440514799.0,
"Value": 307060736
},
"Name": "efs-docker",
"CreationToken": "console-3b8b33de-dc45-4634-b6e1-882187ac3cd3",
"CreationTime": 1440426036.0,
"FileSystemId": "fs-d2c22d7b",
"NumberOfMountTargets": 3,
"LifeCycleState": "available",
"OwnerId": "310444902345"
}
]
}
谢谢, 杰里米
答案 0 :(得分:3)
多次避免调用jq
,从而避免创建多个进程的开销:
jq -r '.FileSystems[] | select(.Name=="efs-docker") | .FileSystemId'
答案 1 :(得分:0)
我成功地使用了这个:
jq '.FileSystems[]' | jq 'select(.Name=="efs-docker")' | jq -r '.FileSystemId'
可能效率不高,但有效。