z / OS Syncsort:省略没有排序的重复项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了z / OS Syncsort:省略没有排序的重复项相关的知识,希望对你有一定的参考价值。

使用手册如何使用syncsort管理此问题无法解决(我们发现使用dfsort的解决方案没有帮助)。由于程序错误(无法及时修复,您知道:程序员,测试,质量检查,部署......)我们在文件(FB / LRECL 250)中获得了重复记录

  • 标题行存在
  • 后续的重复数据行,必须省略,但唯一的一行
  • 数据行不得排序(由于某些记录的专用逻辑关系)
  • 预告片包括数据行计数。

由于文件大小(> 2 mio记录),无法手动编辑文件。

示例infile:

HEADER xxxx
cccc
bbbb 123
bbbb 123
bbbb 123
dddd
aaaa 123
aaaa 123
aaaa
TRAILER COUNT: 8

预期的outfile:

HEADER xxxx
cccc
bbbb 123         
dddd
aaaa 123
aaaa
TRAILER COUNT: 5

所以outfile根本没有排序,省略的记录

bbbb 123         (omitted)
bbbb 123         (omitted)
aaaa 123         (omitted)

根本不需要,可以直接进入Nirvana。

(我甚至会对省略标题/预告片的解决方案感到满意,因为我可以轻松地在后续作业中连接手动生成的行。)

谢谢你的帮助!

答案

我能够使用两个SYNCSORT步骤实现您的预​​期结果。

步骤1:

INREC FIELDS=(1:SEQNUM,4,ZD,5:1,8)
SORT FIELDS=(5,8,CH,A),SKIPREC=1  
SUM FIELDS=NONE

使用INREC,我在前4个字节中附加了序列号,后跟实际数据记录。然后,我用前8个字节作为键对文件进行了排序。正在使用SKIPREC跳过标题记录。

第2步:

SORT FIELDS=(1,4,CH,A)                                              
OUTFIL FNAMES=SORTOF01,REMOVECC,                                    
OUTREC=(1:5,8,80:X),TRAILER1=('TRAILER COUNT:',COUNT=(M11,LENGTH=8))

在步骤2中,正在读取STEP 1的输出文件作为输入。正如您所期望的那样,数据行没有排序,我已经用序列号作为键对输入进行了排序。使用OUTREC,我限制在最终输出文件中写入序列号。我已经使用TRAILER1来打印最后的记录数。

希望这可以帮助。如果您有更有效的替代方案,请告诉我。

另一答案

请参阅下面的排序卡片。它是为上面显示的示例数据而构建的。

//SORTOUT DD SYSOUT=*                                                 
//SYSIN DD *                                                          
 OPTION COPY                                                          
 INREC FIELDS=(1,50,SEQNUM,7,ZD,RESTART=(1,8))                        
 OUTFIL REMOVECC,OMIT=(51,7,ZD,GT,01,|,1,7,CH,EQ,C'TRAILER'),         
        OUTREC=(1,50),TRAILER1=(C'TRAILER COUNT:',COUNT-1=(M11,LENGTH=8))
/*             

以上是关于z / OS Syncsort:省略没有排序的重复项的主要内容,如果未能解决你的问题,请参考以下文章

Syncsort Sum Fields=None 不删除重复项

按 ID 对核心数据进行排序 [重复]

按日期排序数组 - javascript [重复]

Syncsort - 将 UNPAIRED 记录写入 SORTOUT 文件,将 PAIRED 记录写入 PAIRED 文件

C#排序算法——冒泡排序

冒泡排序