如何将值分组到 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)})'