使用jq,我想根据数组中是否存在多个值在JSON文件的不同级别上输出它们。
我的数据如下所示。它显示了我检查的有关有权访问该主机的主机的数量:
[
{
"server": "example_1",
"version": "Debian8",
"keys": [
{
"fingerprint": "SHA256:fingerprint1",
"for_user": "root",
"name": "user1"
},
{
"fingerprint": "SHA256:fingerprint2",
"for_user": "git",
"name": "user2"
}
]
},
{
"server": "example_2",
"version": "Debian9",
"keys": [
{
"fingerprint": "SHA256:fingerprint2",
"for_user": "root",
"name": "user2"
},
{
"fingerprint": "SHA256:fingerprint2",
"for_user": "www",
"name": "user2"
}
]
},
{
"server": "example_3",
"version": "CentOS",
"keys": [
null
]
}
]
我想提取server
的值和for_user
的值,以在.keys[]
中找到user2作为名称的任何情况。基本上,输出看起来像这样:
example1, git
example2, root
example2, www
我已经可以做的是显示第一列,因此.server
的值:
cat test.json | jq -r '.[] | select(.keys[].name | index("user2")) | .server'`
如何在选定的数组元素中打印一个值?
答案 0 :(得分:1)
您可以使用以下jq
命令:
jq -r '.[]|"\(.server), \(.keys[]|select(.name=="user2").for_user)"'