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

如何用jq将LSF调度器的作业数据汇总为主机状态统计表?

仅用bjobs和jq实现主机-作业状态汇总统计

完全可行,以下是直接用bjobs结合jq完成分组统计并输出表格的方案,无需依赖datamash:

场景1:单主机作业(EXEC_HOST为单个主机名)

执行以下命令即可生成格式化的汇总表格:

bjobs -q normal -a -uall -o 'exec_host stat' -json | jq '
  .RECORDS
  | group_by(.EXEC_HOST)
  | map({
      host: .[0].EXEC_HOST,
      stats: (
        group_by(.STAT)
        | map({key: .[0].STAT, value: length})
        | from_entries
      )
    })
  | (["主机名"] + (map(.stats | keys) | add | unique)) as $headers
  | $headers,
    (map(
      [.host] + ($headers[1:] | map(.stats[.] // 0))
    ))
  | @tsv
' | column -t -s $'\t'

命令拆解:

  1. 提取作业数据:.RECORDS直接定位到bjobs输出的作业记录数组
  2. 按主机分组:group_by(.EXEC_HOST)将同一主机的作业归为一组
  3. 统计各状态数量:对每个主机组内的作业按STAT再次分组,用length统计每组数量,转成键值对格式
  4. 构建表头:收集所有出现过的作业状态作为表头列,加上"主机名"
  5. 生成表格行:将每个主机的统计数据对应到表头列,未出现的状态填0
  6. 格式化输出:用@tsv转成制表符分隔格式,再通过column命令对齐成美观的表格

场景2:多主机作业(EXEC_HOST包含多个主机,如hostA hostB)

如果存在作业分配到多台主机的情况,需要先拆分主机名再统计,命令调整为:

bjobs -q normal -a -uall -o 'exec_host stat' -json | jq '
  .RECORDS
  | map(.EXEC_HOST | split(" ")[] as $host | {host: $host, stat: .STAT})
  | group_by(.host)
  | map({
      host: .[0].host,
      stats: (
        group_by(.stat)
        | map({key: .[0].stat, value: length})
        | from_entries
      )
    })
  | (["主机名"] + (map(.stats | keys) | add | unique)) as $headers
  | $headers,
    (map(
      [.host] + ($headers[1:] | map(.stats[.] // 0))
    ))
  | @tsv
' | column -t -s $'\t'

新增的map(.EXEC_HOST | split(" ")[] as $host | {host: $host, stat: .STAT})步骤会把多主机的作业拆分成单主机条目,再按上述逻辑统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:45:22