【发布时间】:2021-07-05 07:08:20
【问题描述】:
我有 jsonlines 数据,我想找到 1. value is empty object 或 2. key is not exist 。在下面的示例中,我想知道 .items.spec.resource={} 或 .items.spec.limits|requests which key 不存在的项目的结果。
data='{"items":[{"metadata":{"name":"pod01"},"spec":{"containers":[{"name":"con01_01","resources":{"limits":{"cpu":"100m"},"requests":{"cpu":"100m"}}},{"name":"con01_02","resources":{"limits":{"cpu":"100m"},"requests":{"cpu":"100m"}}}]}},{"metadata":{"name":"pod02"},"spec":{"containers":[{"name":"con02_01","resources":{"limits":{"cpu":"100m"},"requests":{"cpu":"100m"}}},{"name":"con02_02","resources":{"limits":{"cpu":"100m"}}}]}},{"metadata":{"name":"pod03"},"spec":{"containers":[{"name":"con03_01","resources":{"limits":{"cpu":"100m"},"requests":{"cpu":"100m"}}},{"name":"con03_02","resources":{}}]}}]}'
list=$(echo $data | jq '.items[] | select(.spec.containers[].resources.requests == null or .spec.containers[].resources.limits == null or .spec.containers[].resources == {})')
echo $list
结果来了
{
"metadata": { "name": "pod02" },
"spec": {
"containers": [
{ "name": "con02_01",
"resources": {
"limits": { "cpu": "100m" },
"requests": { "cpu": "100m" }
}
},
{ "name": "con02_02",
"resources": {
"limits": { "cpu": "100m" }
}
}
]
}
}
{
"metadata": { "name": "pod03" },
"spec": {
"containers": [
{
"name": "con03_01",
"resources": {
"limits": { "cpu": "100m" },
"requests": { "cpu": "100m" }
}
},
{ "name": "con03_02",
"resources": {}
}
]
}
}
{
"metadata": { "name": "pod03" },
"spec": {
"containers": [
{ "name": "con03_01",
"resources": {
"limits": { "cpu": "100m" },
"requests": { "cpu": "100m" }
}
},
{ "name": "con03_02",
"resources": {}
}
]
}
}
{
"metadata": { "name": "pod03" },
"spec": {
"containers": [
{ "name": "con03_01",
"resources": {
"limits": { "cpu": "100m" },
"requests": { "cpu": "100m" }
}
},
{ "name": "con03_02",
"resources": {}
}
]
}
}
repeat部分没看懂,估计是条件的关系,怎么才能得到上面条件的部分,想过滤metadata和spec.containers中满足条件的部分。
【问题讨论】:
-
你想要pod名称还是容器名称作为输出?
-
是的,我想要 pod 名称和容器名称作为输出
标签: json select key jq jsonlines