大型机DFSORT:按计数获取每组前N 条记录
我有一个输入文件,其记录如下:
FILE_NAME1 DATA_REC_1
FILE_NAME1 DATA_REC_2
FILE_NAME1 DATA_REC_2
FILE_NAME1 DATA_REC_2
FILE_NAME1 DATA_REC_3
FILE_NAME1 DATA_REC_3
FILE_NAME1 DATA_REC_3
FILE_NAME1 DATA_REC_3
FILE_NAME2 DATA_REC_1
FILE_NAME2 DATA_REC_2
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_4
FILE_NAME2 DATA_REC_4
FILE_NAME2 DATA_REC_4
FILE_NAME3 DATA_REC_7
我想按照File_Name和 Data_rec对它们进行分组,并从每组中选出出现次数最多的前两个,并给出它们的计数,如下所示。
FILE_NAME1 DATA_REC_3 4
FILE_NAME1 DATA_REC_2 3
FILE_NAME2 DATA_REC_3 6
FILE_NAME2 DATA_REC_4 3
FILE_NAME3 DATA_REC_7 1
请你指引我走向正确的方向。
解决方案
假设你的FILENAME位于前10个字节,数据记录位于第11至第21字节,下面的DFSORT/ICETOOL JCL将给出你所需的结果。
//STEP0100 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//INP DD *
FILE_NAME1 DATA_REC_1
FILE_NAME1 DATA_REC_2
FILE_NAME1 DATA_REC_2
FILE_NAME1 DATA_REC_2
FILE_NAME1 DATA_REC_3
FILE_NAME1 DATA_REC_3
FILE_NAME1 DATA_REC_3
FILE_NAME1 DATA_REC_3
FILE_NAME2 DATA_REC_1
FILE_NAME2 DATA_REC_2
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_3
FILE_NAME2 DATA_REC_4
FILE_NAME2 DATA_REC_4
FILE_NAME2 DATA_REC_4
FILE_NAME3 DATA_REC_7
//TMP DD DSN=&&TEMP,DISP=(,PASS),SPACE=(TRK,(1,1),RLSE)
//OUT DD SYSOUT=*
//TOOLIN DD *
SORT FROM(INP) TO(TMP) USING(CTL1)
SORT FROM(TMP) TO(OUT) USING(CTL2)
/*
//CTL1CNTL DD *
INREC BUILD=(01,21, # FILENAME + DATAREC
C'00000001') # INIT COUNT = 1
SORT FIELDS=(01,21,CH,A) # FILENAME + DATAREC
SUM FIELDS=(22,08,ZD) # SUM COUNTER
/*
//CTL2CNTL DD *
SORT FIELDS=(01,10,CH,A, # FILENAME
22,08,CH,D) # COUNT DESC
OUTREC OVERLAY=(32:SEQNUM,8,ZD, # NUMBER THE DUPS
RESTART=(01,10)) BASED ON FILENAME
OUTFIL INCLUDE=(32,08,ZD,LE,2), # INCLUDE TOP 2
BUILD=(01,21,22,08,ZD,M10,LENGTH=8) # BUILD RECORD
/*
该作业的输出将是
FILE_NAME1 DATA_REC_3 4
FILE_NAME1 DATA_REC_2 3
FILE_NAME2 DATA_REC_3 6
FILE_NAME2 DATA_REC_4 3
FILE_NAME3 DATA_REC_7 1
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。