如果没有指定键,如何在JQ中打印给定条件的数组的特定值 [英] How do I print a specific value of an array given a condition in jq if there is no key specified
本文介绍了如果没有指定键,如何在JQ中打印给定条件的数组的特定值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用JQ中的regex test()函数输出.metadata.name的值,后跟.spec.template.spec.tainers[].Students[]数组中的学生姓名。
检索单个数组值时遇到问题,因为没有为Students[]数组指定键。
例如,如果我检查Students[]数组是否包含单词&Quot;Jeff";,我希望输出显示如下:
student-deployment: Jefferson
我尝试的内容:
我尝试了下面的命令,但我不确定如何只获取&jefferson";值。下面的命令将打印出所有Students[]数组值,这不是我想要的。我正在使用PowerShell运行下面的命令。
kubectl get deployments -o json | jq -r '.items[] | select(.spec.template.spec.containers[].students[]?|test(""^Jeff."")) | .metadata.name, "": "", .spec.template.spec.containers[].students'
如果没有指定键,有没有办法在JQ中给出给定条件的数组的特定值?此外,如果有多个部署,该解决方案是否有效?
下面的部署模板是json格式,我将其缩短为仅相关部分。
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "student-deployment",
"namespace": "default"
},
"spec": {
"template": {
"spec": {
"containers": [
{
"students": [
"Alice",
"Bob",
"Peter",
"Sally",
"Jefferson"
]
}
]
}
}
}
}
]
}
推荐答案
为此,我们引入了一个变量$pattern
。您可以使用--arg pattern
将其设置为您的regex,例如"Jeff"
或"^Al"
或"e$"
以按test
筛选学生列表,或将其留空以查看所有学生。
.item[]
元素(即遍历所有部署)。对于每个找到的内容,我们输出.metadata.name
的内容,后跟一个原义冒号和一个空格。然后我们再次迭代所有.spec.template.spec.containers[].students[]
,执行模式test
并连接结果。
要打印原始字符串而不是JSON,我们在调用jq
时使用-r
选项。
kubectl get deployments -o json
| jq --arg pattern "Jeff" -r '
.items[]
| .metadata.name + ": " + (
.spec.template.spec.containers[].students[]
| select(test($pattern))
)
'
这篇关于如果没有指定键,如何在JQ中打印给定条件的数组的特定值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文