You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jq分组(group by)同时实现增量计数的技术问询

Got it!我来帮你实现这个用jq按organizationId分组并统计状态计数的需求,直接上完整解决方案:

用jq实现分组统计服务器状态

咱们的目标是把输入的服务器数据按组织ID分组,同时统计每个组织下的总服务器数、UP状态数量和DOWN状态数量。

原始输入数据(Sample input1.json)

[{ "organizationId": "org1", "status": "UP", "server": "server1", "somekey1" : "somevalue1" }, { "organizationId": "org1", "status": "DOWN", "server": "server2", "somekey2" : "somevalue2" }, { "organizationId": "org1", "status": "DOWN", "server": "server3" }, { "organizationId": "org2", "server": "server1", "status": "UP", "somekey2" : "somevalue2" }, { "organizationId": "org2", "server": "server2", "status": "UP", "somekey4" : "somevalue4" }]

执行的jq命令

jq 'group_by(.organizationId) | map({
  organizationId: .[0].organizationId,
  totalServers: length,
  upCount: map(select(.status == "UP")) | length,
  downCount: map(select(.status == "DOWN")) | length
})' Sample input1.json

命令细节拆解

  • group_by(.organizationId):将原始JSON数组按照organizationId字段分组,每个分组对应一个组织的所有服务器数据子数组
  • map(...):遍历每个分组,构造最终的统计结果对象:
    • organizationId: .[0].organizationId:提取分组的组织ID(同一分组内所有元素的该值完全一致)
    • totalServers: length:直接取分组的元素个数,就是该组织的总服务器数量
    • upCount: map(select(.status == "UP")) | length:先筛选出分组内状态为UP的条目,再统计这些条目的数量
    • downCount: map(select(.status == "DOWN")) | length:同理,筛选并统计状态为DOWN的条目数量

最终输出结果(Expected output.json)

[
  {
    "organizationId": "org1",
    "totalServers": 3,
    "upCount": 1,
    "downCount": 2
  },
  {
    "organizationId": "org2",
    "totalServers": 2,
    "upCount": 2,
    "downCount": 0
  }
]

内容的提问来源于stack exchange,提问作者Naveen K Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:39:42