如何将值分组到 jq 中相同字段值的数组?
How do I group values to an array for the same field value in jq?
我有 json 看起来像
的数据
[
{
"session": "ffe887f3f150",
"src_ip": "81.71.87.156"
},
{
"session": "fff42102e329",
"src_ip": "143.198.224.52"
},
{
"session": "fff9c8ca82be",
"src_ip": "159.203.97.7"
}
]
我已经设法过滤掉 session
的唯一值,但可以有更多 sessions
链接到相同的 src_ip
。
现在我想以一种方式合并数据集,以便我在一个地方将 session
ID 分组到 src_ip
,例如
[
...
{
"src_ip": "81.71.87.156"
"sessions": ["ffe887f3f150","fff42102e329"]
},
...
]
这与此处提出的问题有些相似:How do I collect unique elements of an array-valued field across multiple objects in jq?,但我很难根据我的情况对其进行转换。
使用 group_by
,您可以按任何给定的标准进行分组,然后 assemble 通过从其中任何一个(例如第一个)中获取共同的 .src_ip
所有分组的项目,以及 .sessions
作为所有 .session
上的映射数组。添加您认为合适的其他部分。
jq 'group_by(.src_ip) | map({src_ip: .[0].src_ip, sessions: map(.session)})'
我有 json 看起来像
的数据[
{
"session": "ffe887f3f150",
"src_ip": "81.71.87.156"
},
{
"session": "fff42102e329",
"src_ip": "143.198.224.52"
},
{
"session": "fff9c8ca82be",
"src_ip": "159.203.97.7"
}
]
我已经设法过滤掉 session
的唯一值,但可以有更多 sessions
链接到相同的 src_ip
。
现在我想以一种方式合并数据集,以便我在一个地方将 session
ID 分组到 src_ip
,例如
[
...
{
"src_ip": "81.71.87.156"
"sessions": ["ffe887f3f150","fff42102e329"]
},
...
]
这与此处提出的问题有些相似:How do I collect unique elements of an array-valued field across multiple objects in jq?,但我很难根据我的情况对其进行转换。
使用 group_by
,您可以按任何给定的标准进行分组,然后 assemble 通过从其中任何一个(例如第一个)中获取共同的 .src_ip
所有分组的项目,以及 .sessions
作为所有 .session
上的映射数组。添加您认为合适的其他部分。
jq 'group_by(.src_ip) | map({src_ip: .[0].src_ip, sessions: map(.session)})'