如何使用排序从输出文件 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
您好,我正在尝试从 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
/*
所以使用它我能够获得系统输出中错误文件中不存在的有效记录
系统输出:
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)
/*
根据上面的快照,您首先重新格式化了 181 字节的错误文件,然后是 181 字节的有效文件。因此,在编写 NOMATCH2 文件时,您应该构建为 BUILD=(1:183,181) 而不是 BUILD=(1:2,181)。希望这能解决您的问题,如果您仍然无法解决问题,请在此处更新。
此致,
暗部.
为了完整起见,我发布了更新后的脚本和生成的输出文件:
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 对 Windows v14r3-117-ge2d0a249 进行验证,但结果应与 z/OS.
的 DFSORT 相同
您好,我正在尝试从 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
/*
所以使用它我能够获得系统输出中错误文件中不存在的有效记录
系统输出:
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)
/*
根据上面的快照,您首先重新格式化了 181 字节的错误文件,然后是 181 字节的有效文件。因此,在编写 NOMATCH2 文件时,您应该构建为 BUILD=(1:183,181) 而不是 BUILD=(1:2,181)。希望这能解决您的问题,如果您仍然无法解决问题,请在此处更新。
此致, 暗部.
为了完整起见,我发布了更新后的脚本和生成的输出文件:
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 对 Windows v14r3-117-ge2d0a249 进行验证,但结果应与 z/OS.
的 DFSORT 相同