some useful JCL sort

Sourav K Sahu
4 min readJul 23, 2022

Split one file into multiple files based on start-record & end-record number using JCL-Sort

//SORTIN DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOF01 DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SORTOF02 DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SORTOF03 DD DSN=dataset3,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL FILES=01,ENDREC=500
OUTFIL FILES=02,STARTREC=501,ENDREC=1000
OUTFIL FILES=03,STARTREC=1001,ENDREC=1500
/*

Convert upper-case to lower-case using JCL-Sort

//SORTIN DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1,16,TRAN=UTOL)
/*

Convert lower-case to upper-case using JCL-Sort

//SORTIN DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1,16,TRAN=LTOU)
/*

Convert VB to FB file using JCL-Sort

//SORTIN DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1,80),VTOF
/*

Convert packed-decimal to zoned-decimal using JCL-Sort

//SORTIN DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
INCLUDE COND=(43,1,CH,EQ,C'Z')
OUTREC FIELDS=(1:7,10,1X,12:18,10,1X,
23:76,9,PD,EDIT=(SIIIIIIIIIIIIIII.II),SIGNS=(,-),
1X,41:154,9,PD,EDIT=(SIIIIIIIIIIIIIII.II),SIGNS=(,-),
1X,59:359,3,PD,EDIT=(IIIII),
1X,65:33,3,PD,EDIT=(IIIII),1X,
71:414,25,1X,97:439,25)
/*

Print number of Records in input file using JCL-Sort

//SORTIN DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL REMOVECC,NODETAIL,
TRAILER1=('NO. OF RECORDS:',COUNT=(M16,LENGTH=8))
/*

Copy form input to output using INCLUDE verb using JCL-Sort

//SORTIN   DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOF01 DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SORTOF02 DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SORTOF03 DD DSN=dataset3,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL FILES=01,INCLUDE=(1,6,CH,EQ,C'Z',AND,(9,3,SS,EQ,C'928,234'))
OUTFIL FILES=02,INCLUDE=(7,5,CH,EQ,C'BAPNA')
OUTFIL FILES=03,INCLUDE=(27,11,CH,EQ,C'26-AUG-2013')
/*

Copy form input to output using OMIT verb (excluding) using JCL-Sort

//SORTIN   DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOF01 DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL FILES=01,OMIT COND=(1,1,SS,EQ,C'XYZ',OR,7,5,CH,EQ,C'ABC')
/*

Find and Replace using JCL-Sort

//SORTIN DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FINDREP=(INOUT=(C'RAM',C'SHYAM'))
/*

Remove duplicate using JCL-Sort

//SORTIN DD DSN=Y897797.INPUT,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=(01,08,CH,A)
SUM FIELDS=NONE
/*

Copy matching records from two inputs to output using JCL-Sort

//SORTJNF1 DD DSN=Y897797.INPUT1,
// DISP=SHR
//*
//SORTJNF2 DD DSN=Y897797.INPUT2,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
SORT FIELDS=COPY
JOINKEYS FILES=F1,FIELDS=(1,08,A)
JOINKEYS FILES=F2,FIELDS=(1,08,A)
REFORMAT FIELDS=(F1:1,24,F2:1,10)
/*

Copy unmatched records from two inputs to output using JCL-Sort

//SORTJNF1 DD DSN=Y897797.INPUT1,
// DISP=SHR
//*
//SORTJNF2 DD DSN=Y897797.INPUT2,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
SORT FIELDS=COPY
JOINKEYS FILES=F1,FIELDS=(1,17,A)
JOINKEYS FILES=F2,FIELDS=(1,17,A)
JOIN UNPAIRED,F1,F2,ONLY
REFORMAT FIELDS=(F1:1,17,F2:1,17,?)
/*

Copy unmatched records from one of the two inputs to output using JCL-Sort

//SORTJNF1 DD DSN=Y897797.INPUT1,
// DISP=SHR
//*
//SORTJNF2 DD DSN=Y897797.INPUT2,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
SORT FIELDS=COPY
JOINKEYS FILES=F1,FIELDS=(1,17,A)
JOINKEYS FILES=F2,FIELDS=(1,17,A)
JOIN UNPAIRED,F1,ONLY
REFORMAT FIELDS=(F1:1,17,F2:1,17,?)
/*

Copy unmatched records from one of the two inputs & matched from both to output using JCL-Sort

//SORTJNF1 DD DSN=Y897797.INPUT1,
// DISP=SHR
//*
//SORTJNF2 DD DSN=Y897797.INPUT2,
// DISP=SHR
//*
//SORTOUT DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
SORT FIELDS=COPY
JOINKEYS FILES=F1,FIELDS=(1,17,A)
JOINKEYS FILES=F2,FIELDS=(1,17,A)
JOIN UNPAIRED,F1
REFORMAT FIELDS=(F1:1,17,F2:1,17,?)
/*

JCL-Sort JOINKEYS examples

//***JOIN TYPE***|***FILE-1***|***FILE-2***|***OUTPUT***|
// |Albert |Albert |Albert |
// |Dennis |Dennis |Dennis |
// |Gary |Gary |Gary |
// Inner Join |Jake | | |
// |Kyle | | |
// | |Matt | |
// | | | |
//*******************************************************
//
//***JOIN TYPE***|***FILE-1***|***FILE-2***|***OUTPUT***|
// |Albert |Albert | |
// |Dennis |Dennis | |
// |Gary |Gary | |
// UNPAIRED, |Jake | |Jake |
// F1,F2,ONLY |Kyle | |Kyle |
// | |Matt |Matt |
// | | | |
//*******************************************************
//
//***JOIN TYPE***|***FILE-1***|***FILE-2***|***OUTPUT***|
// |Albert |Albert |Albert |
// |Dennis |Dennis |Dennis |
// |Gary |Gary |Gary |
// Left Outer |Jake | |Jake |
// Join |Kyle | |Kyle |
// | |Matt | |
// | | | |
//*******************************************************
//
//***JOIN TYPE***|***FILE-1***|***FILE-2***|***OUTPUT***|
// |Albert |Albert |Albert |
// |Dennis |Dennis |Dennis |
// |Gary |Gary |Gary |
// Right Outer |Jake | | |
// Join |Kyle | | |
// | |Matt |Matt |
// | | | |
//*******************************************************
//
//***JOIN TYPE***|***FILE-1***|***FILE-2***|***OUTPUT***|
// |Albert |Albert |Albert |
// |Dennis |Dennis |Dennis |
// |Gary |Gary |Gary |
// Full Outer |Jake | |Jake |
// Join |Kyle | |Kyle |
// | |Matt |Matt |
// | | | |
//*******************************************************
//
//***JOIN TYPE***|***FILE-1***|***FILE-2***|***OUTPUT***|
// |Albert |Albert | |
// |Dennis |Dennis | |
// |Gary |Gary | |
// UNPAIRED,F1, |Jake | |Jake |
// ONLY |Kyle | |Kyle |
// | |Matt | |
// | | | |
//*******************************************************
//
//***JOIN TYPE***|***FILE-1***|***FILE-2***|***OUTPUT***|
// |Albert |Albert | |
// |Dennis |Dennis | |
// |Gary |Gary | |
// UNPAIRED,F2, |Jake | | |
// ONLY |Kyle | | |
// | |Matt |Matt |
// | | | |
//*******************************************************

Download the following pdf for more sort tricks from IBM

If you like this content, then please endorse me on linkedin @ www.linkedin.com/in/souravksahu

--

--

Sourav K Sahu

An IT Consultant, who has 8 years of experience, undertakes complex assignments and delivers high value software solutions.