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

使用DFSORT统计JES2作业输出按分组计算记录数的方案咨询

DFSORT单步实现JES2作业维度统计的解决方案

实现思路

你需要的按作业维度的汇总不需要将统计值推送到所有明细行,直接用DFSORT内置的SECTIONS分组聚合能力,单步COPY处理即可输出你要的结果,不需要生成多个中间文件。

完整SYSIN参考代码

//SYSIN DD *
* 第一步:生成全局行号、作业ID、作业内序号、推送作业名到组内所有行
INREC OVERLAY=(135:SEQNUM,6,ZD,START=1,INCR=1)
INREC IFTHEN=(WHEN=GROUP,
              BEGIN=(21,6,CH,EQ,C'J E S 2 '),
              PUSH=(142:ID=6,          * 作业ID
                    156:28,8,         * 需调整为你JES2头行中JOBNAME的实际起始位置和长度
                    HIT=NEXT)),
      IFTHEN=(WHEN=GROUP,
              BEGIN=(21,6,CH,EQ,C'J E S 2 '),
              PUSH=(149:SEQ=6))         * 作业内行号

* 不需要重排原始顺序,直接COPY处理
SORT FIELDS=COPY

* 按作业ID分组输出,每个作业只输出一行汇总
OUTFIL REMOVECC,
       SECTIONS=(142,6,         * 按142位开始的6位作业ID分组
       HEADER3=(156,8,          * 取组内第一行的JOBNAME
                X,
                135,6,          * 取组内第一行的全局行号作为首行f_row
                X,
                T1=(135,6,ZD,LAST), * 取组内最后一行的全局行号作为末行l_row
                X,
                T2=(149,6,ZD,LAST), * 取组内最后一行的作业内行号作为总行数rowcnt
                /)),
       NODETAIL  * 不输出原始明细行,只输出分组汇总行
/*

参数说明

  • 你原有生成全局行号、作业ID、作业内行号的逻辑完全保留,仅新增了JOBNAME的推送逻辑,需要根据你实际JES2头行中作业名的位置调整156:28,8的起始位置和长度
  • SECTIONS=(142,6) 指定按作业ID进行分组
  • HEADER3 定义每个分组的输出格式,其中带LAST修饰符的字段会自动取分组最后一条记录的对应值
  • NODETAIL 参数会过滤所有原始明细行,仅输出每个分组的一行汇总结果,和你要求的输出样例完全匹配

扩展:如果需要将统计值推送到所有明细行

如果你后续处理需要每个作业的所有行都带上f_row、l_row、rowcnt字段,可采用倒序二次分组的方案:

//SYSIN DD *
* 原有逻辑生成全局行号、作业ID、作业内行号、JOBNAME
INREC OVERLAY=(135:SEQNUM,6,ZD,START=1,INCR=1)
INREC IFTHEN=(WHEN=GROUP,
              BEGIN=(21,6,CH,EQ,C'J E S 2 '),
              PUSH=(142:ID=6,
                    156:28,8,
                    HIT=NEXT)),
      IFTHEN=(WHEN=GROUP,
              BEGIN=(21,6,CH,EQ,C'J E S 2 '),
              PUSH=(149:SEQ=6))

* 第一次排序:按全局行号倒序
SORT FIELDS=(135,6,ZD,D)

* 倒序后按作业ID分组,推送末行、总行数到组内所有行
INREC IFTHEN=(WHEN=GROUP,
              BEGIN=(142,6,CH,NE,142,6,CH,NEXT),
              PUSH=(164:135,6,  * l_row = 倒序后组首行的全局行号
                    170:149,6)) * rowcnt = 倒序后组首行的作业内行号

* 第二次排序:按全局行号升序恢复原始顺序
SORT FIELDS=(135,6,ZD,A)

* 输出时每个行都包含JOBNAME、f_row、l_row、rowcnt字段
OUTFIL BUILD=(1,134,156,8,X,135,6,X,164,6,X,170,6)
/*

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:36:04