基于STORE-CUSTOM-ID合并同LRECL文件的SORT SYSIN配置咨询
能否通过SORT实现特定文件合并需求?
我有两个LRECL完全相同的文件,字段结构如下:
FIELD NAME FIELD LENGTH STORE-CUSTOM-ID X(08) STORE-GROUP X(25) STORE-LIST 9(04) OCCURS 500 TIMES
需基于STORE-CUSTOM-ID(前8字节)对这两个文件执行合并操作,规则如下:
- 关键字匹配时:
- 将两条匹配记录合并为一条
STORE-GROUP字段设为'Merged Record'STORE-LIST部分从File1第一个'0000'位置开始,拼接File2中所有非'0000'的存储编号
- 关键字不匹配时:
- 将两条未匹配记录分别写入输出文件
示例
输入
File1:
11223344File 1 Record 000900210022003400000000000000000000
File2:
11223344File 2 Record 100310121014000000000000000000000000
输出
11223344Merged Record 000900210022003410031012101400000000
可以通过SORT实现该需求,以下是对应的SYSIN配置:
//SYSIN DD * // 按STORE-CUSTOM-ID关联文件,保留未匹配记录 JOINKEYS F1=INA,FIELDS=(1,8,A) JOINKEYS F2=INB,FIELDS=(1,8,A) JOIN UNPAIRED,F1,F2 // 整合字段:F1的ID+GROUP、F2的STORE-LIST、匹配标识位 REFORMAT FIELDS=(F1:1,33,F2:34,2000,?) OPTION COPY // 处理不同匹配状态的记录 INREC IFTHEN=(WHEN=(2034,1,CH,EQ,C'C'), // 匹配记录 OVERLAY=(9:C'Merged Record', 34:BUILD=(F1:34,2000,SQZ=(SHIFT=LEFT,REMOVE=C'0000'), F2:34,2000,SQZ=(SHIFT=LEFT,REMOVE=C'0000'), 2000X), 34:34,2000)), IFTHEN=(WHEN=(2034,1,CH,EQ,C'A'), // 仅F1存在的记录 OVERLAY=(34:F1:34,2000)), IFTHEN=(WHEN=(2034,1,CH,EQ,C'B'), // 仅F2存在的记录 OVERLAY=(1:F2:1,33,34:F2:34,2000)) // 输出最终记录,移除匹配标识位 OUTREC BUILD=(1,2033) /*
配置说明
- JOINKEYS:通过前8字节的
STORE-CUSTOM-ID关联两个输入文件,UNPAIRED,F1,F2确保保留两个文件中未匹配的独立记录 - REFORMAT:整合F1的基础字段、F2的存储列表字段,并添加1字节匹配标识('A'=仅F1有,'B'=仅F2有,'C'=双方匹配)
- INREC:
- 匹配记录('C'):替换
STORE-GROUP为指定文本,提取并拼接两个文件中所有非'0000'的存储编号,再用'0000'填充至原字段长度 - 未匹配记录('A'/'B'):直接保留对应文件的原始记录内容
- 匹配记录('C'):替换
- OUTREC:移除匹配标识位,输出符合原LRECL长度的记录
内容的提问来源于stack exchange,提问作者Aarthi M
相关产品推荐
相关产品推荐

