如何使用排序从输出文件 1 中的 F1 和 F2 中获取匹配记录,以及从输出文件 2 中的 F2 中获取不匹配记录
Posted
技术标签:
【中文标题】如何使用排序从输出文件 1 中的 F1 和 F2 中获取匹配记录,以及从输出文件 2 中的 F2 中获取不匹配记录【英文标题】:How to Get Matching records from both F1 & F2 in output file1 and Non-Matching Records from F2 in output File 2 using Sort 【发布时间】:2021-05-25 16:56:48 【问题描述】:您好,我正在尝试从 2 个文件中查找匹配和不匹配的记录,一个文件是带有 181 LRECL 的错误文件,第二个文件 F2 是具有相同 181 LRECL 的有效记录文件。
示例错误文件
12345678901
11111111111
11111111111
22222222222
有效文件有
33333333333
11111111111
11111111111
44444444444
我实现了左外连接
//F1 -> ERROR FILE
//F2 -> VALID FILE
//SYSOUT DD SYSOUT=*
//SYSIN DD *
JOINKEYS F1=MAIN,FIELDS=(43,11,A)
JOINKEYS F2=LOOKUP,FIELDS=(10,11,A)
JOIN UNPAIRED,F2 ONLY
SORT FIEDLS=COPY
/*
所以使用它我能够获得 sysout 的错误文件中不存在的有效记录
系统输出:
33333333333
44444444444
但我不想丢失两个文件中的匹配记录,并希望将两个文件中的匹配记录写入第二个输出文件。
我尝试实现
FULL OUTER Join,但无法得到结果
//F1 -> Error File
//F2 -> Valid File
//MATCH DD DSN=MYDATA.URMI.SAMPLE.MATCH,DISP=OLD
//NOMATCH1 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH1,DISP=OLD
//NOMATCH2 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH2,DISP=OLD
//SYSOUT DD SYSOUT=*
//SYSIN DD *
JOINKEYS F1=MAIN,FIELDS=(43,11,A)
JOINKEYS F2=LOOKUP,FIELDS=(10,11,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(?,F1:1,181,F2:1,181)
OPTION COPY
OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,181)
OUTFIL FNAMES=NOMATCH1,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,181)
OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:2,181)
/*
【问题讨论】:
好的,已删除,谢谢 【参考方案1】:根据上面的快照,您首先重新格式化了 181 字节的错误文件,然后是 181 字节的 VALID 文件。因此,在编写 NOMATCH2 文件时,您应该构建为 BUILD=(1:183,181) 而不是 BUILD=(1:2,181)。希望这能解决您的问题,如果您仍然无法解决问题,请在此处更新。
问候, 暗部。
【讨论】:
您好 Anbu,感谢您的回复。我实施了上述解决方案,并且 NOMATCH2 & 1 文件似乎复制了正确的数据。再次感谢。【参考方案2】:为了完整起见,我将发布更新后的脚本和生成的输出文件:
JOINKEYS F1=MAIN,FIELDS=(43,11,A)
JOINKEYS F2=LOOKUP,FIELDS=(10,11,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(?,F1:1,181,F2:1,181)
OPTION COPY
OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,181)
OUTFIL FNAMES=NOMATCH1,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,181)
OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:183,181)
输出文件 MATCH 应包含:
11111111111
11111111111
11111111111
11111111111
输出文件 NOMATCH1 应包含:
12345678901
22222222222
输出文件 NOMATCH2 应包含:
33333333333
44444444444
这已使用 AHLSORT for Windows v14r3-117-ge2d0a249 进行了验证,但结果应该与 DFSORT for z/OS 相同。
【讨论】:
以上是关于如何使用排序从输出文件 1 中的 F1 和 F2 中获取匹配记录,以及从输出文件 2 中的 F2 中获取不匹配记录的主要内容,如果未能解决你的问题,请参考以下文章