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

如何用jq计算阶段间滚动时间差并生成含延迟字段的结果?

用jq计算阶段间的时间延迟

需求说明

输入是包含各阶段提交时间、完成时间的JSON数组,需要为每个阶段添加两个字段:

  • delayTillNextStageSubmit:当前阶段完成时间到下一阶段提交时间的间隔(最后一个阶段为null)
  • delayFromPrevStageComplete:上一阶段完成时间到当前阶段提交时间的间隔(第一个阶段为null)

输入示例

[
  {
    "stageId": 1,
    "submitTime_epoch_secs": 5,
    "completionTime_epoch_secs": 10
  },
  {
    "stageId": 2,
    "submitTime_epoch_secs": 15,
    "completionTime_epoch_secs": 17
  },
  {
    "stageId": 3,
    "submitTime_epoch_secs": 29,
    "completionTime_epoch_secs": 30
  }
]

jq实现命令

jq '
  range(0; length) as $i |
  .[$i] + {
    delayTillNextStageSubmit: (if $i < length - 1 then .[$i+1].submitTime_epoch_secs - .[$i].completionTime_epoch_secs else null end),
    delayFromPrevStageComplete: (if $i > 0 then .[$i].submitTime_epoch_secs - .[$i-1].completionTime_epoch_secs else null end)
  }
  | [.] | add
' input.json

输出结果

[
  {
    "stageId": 1,
    "submitTime_epoch_secs": 5,
    "completionTime_epoch_secs": 10,
    "delayTillNextStageSubmit": 5,
    "delayFromPrevStageComplete": null
  },
  {
    "stageId": 2,
    "submitTime_epoch_secs": 15,
    "completionTime_epoch_secs": 17,
    "delayTillNextStageSubmit": 12,
    "delayFromPrevStageComplete": 5
  },
  {
    "stageId": 3,
    "submitTime_epoch_secs": 29,
    "completionTime_epoch_secs": 30,
    "delayTillNextStageSubmit": null,
    "delayFromPrevStageComplete": 12
  }
]

逻辑解释

  1. 遍历数组索引:用range(0; length)获取每个元素的索引$i
  2. 添加延迟字段:
    • delayTillNextStageSubmit:判断当前索引不是最后一个时,用下一阶段的提交时间减去当前阶段的完成时间;否则设为null
    • delayFromPrevStageComplete:判断当前索引不是第一个时,用当前阶段的提交时间减去上一阶段的完成时间;否则设为null
  3. 重组数组:通过| [.] | add将处理后的单个对象重新组合成数组

内容的提问来源于stack exchange,提问作者pankajsaha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:30:42