Me tiré unas horas entendiendo qué hace este código... He usado siempre el DFSORT, el ICETOOL es relativamente nuevo y viene a ser la evolución del DFSORT. He formateado registros y filtrado con IFTHEN pero este ejemplo me ha impresionado

JCL Código:
  1. //SORT EXEC PGM=ICETOOL
  2. //TOOLMSG  DD SYSOUT=*
  3. //DFSMSG   DD SYSOUT=*
  4. //INF      DD DISP=SHR,DSN=&INFILE
  5. //OUTF     DD DISP=OLD,DSN=&PILOTE
  6. //*
  7. //TMP      DD DISP=MOD,DSN=&&TEMP,UNIT=SYSDA,SPACE=(CYL,(5,15))
  8. //TMPH     DD DISP=MOD,DSN=&&TEMP1,UNIT=SYSDA,SPACE=(CYL,(1,5))
  9. //TMPH2    DD DISP=MOD,DSN=&&TEMP2,UNIT=SYSDA,SPACE=(CYL,(1,5))
  10. //TMPD     DD DISP=MOD,DSN=&&TEMP3,UNIT=SYSDA,SPACE=(CYL,(5,15))
  11. //TMPD2    DD DISP=MOD,DSN=&&TEMP4,UNIT=SYSDA,SPACE=(CYL,(1,5))
  12. //*
  13. //TOOLIN DD *
  14.  COPY   FROM(INF)  USING(CPY1)
  15.  SELECT FROM(TMPH) TO(TMPH2) ON(7,17,ZD) FIRST USING(CPY2)
  16.  SELECT FROM(TMPD) TO(TMPD2) ON(7,17,ZD) FIRST USING(CPY3)
  17.  COPY   JKFROM     TO(TMP)  USING(CPY4)
  18.  COPY   FROM(TMP)  TO(OUTF) USING(CPY5)
  19. /*
  20. //CPY1CNTL DD *
  21.   INREC BUILD=(SEQNUM,6,PD,42:X'00001C',45:X'0000001C',49:1,1,51:1,450)
  22.   OUTREC IFTHEN=(WHEN=GROUP,
  23.     BEGIN=(51,1,ZD,EQ,0),
  24.     END=(51,1,ZD,EQ,6),
  25.     PUSH=(7:52,17))
  26.   SORT FIELDS=(7,17,ZD,A)
  27.   OUTFIL FNAMES=TMPH,INCLUDE=(51,1,ZD,EQ,0)
  28.   OUTFIL FNAMES=TMPD,INCLUDE=(51,1,ZD,NE,0)
  29.   OUTFIL FNAMES=TMP,INCLUDE=(51,1,ZD,NE,0),
  30.          IFTHEN=(WHEN=GROUP,
  31.     BEGIN=(51,1,ZD,EQ,1),
  32.     END=(51,1,ZD,GT,5),
  33.     PUSH=(24:52,25))
  34. /*                
  35. //CPY2CNTL DD *
  36.   SUM FIELDS=(42,3,PD)
  37. /*
  38. //CPY3CNTL DD *
  39.   SUM FIELDS=(45,4,PD)
  40. /*
  41. //CPY4CNTL DD *
  42.   JOINKEYS F1=TMPH2,FIELDS=(7,17,A)
  43.   JOINKEYS F2=TMPD2,FIELDS=(7,17,A)
  44.   REFORMAT FIELDS=(F1:1,44,F2:45,4,F1:49,452)
  45. /*
  46. //CPY5CNTL DD *
  47.   SORT FIELDS=(7,17,ZD,A,1,6,PD,A)
  48.   OUTREC BUILD=(SEQNUM,6,PD,7:7,494)
  49.   OUTFIL FNAMES=OUTF,IFTHEN=(WHEN=(1,6,PD,EQ,1),
  50.     OVERLAY=(24:DATENS(4MD),32:TIMENS(24),38:C'DNAX'))
  51. /*