如何使用排序从输出文件 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 相同