无法通过手册找出如何使用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。
(我甚至会对省略标题/预告片的解决方案感到满意,因为我可以轻松地在后续作业中连接手动生成的行。)
感谢您的帮助!
答案 0 :(得分:0)
我能够使用两个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 来打印最后的记录数。
希望这会有所帮助。如果您有更有效的替代方案,请告诉我。
答案 1 :(得分:0)
请参阅下面的排序卡片。它是为上面显示的样本数据而构建的。
//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))
/*