Sort Utility Examples
Sort Utility Examples
Note:
This tutorial is aimed at people who have some knowledge on SORT
Utility.
Provided the explanations wherever needed, input & output files,
control cards, record layout for input & output files.
Some other capabilities of sort are explained after the examples.
Basic Information:
Provides information about the field(s) that will be used for
sorting options:
FIELDS=(P,L,FF,O)
- used to specify the key field(s)
- Maximum of 64
P starting position of the key field
L length of the key field
FF data format of the control field
CH EBCDIC alphanumeric
ZD Zoned decimal
PD Packed decimal
FI Fixed point
BI Binary
O collating sequence
A ascending order
D descending order
Mnemonic comparison type
EQ equality
NE not equal
GT greater than
GE greater than or equal to
LT less than
LE less than or equal to
OMIT COND=(1,1,BI,EQ,X'FF',OR,8,5,PD,LT,+1)
Any record containing X'FF' in the 1st byte OR a packed decimal
value less than 1 in the 5 byte field starting in column 8 should
be omitted from the output.
Basic Program:
VIEW USERID.SAMPLE.JCL(TPE2DSK) - 01.46 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //TPE2DSK JOB (ACCT PARM),'DEVELP',
000002 // CLASS=3,NOTIFY=&SYSUID,MSGCLASS=T
000003 //*
000004 //SORT1 EXEC PGM=SYNCSORT
000005 //*
000006 //SORTIN DD DISP=SHR,DSN=USERID.TAPE.FILE
000007 //*
000008 //SORTOUT DD DISP=(NEW,CATLG,DELETE),UNIT=DISK,
000009 // SPACE=(CYL,(100,100),RLSE),
000010 // DCB=(*.SORTIN), ==> Takes same attributes as input file.
000011 // DSN=USERID.SORTOUT.DASD.FILE
000012 //*
000013 //SYSOUT DD SYSOUT=*
000014 //*
000015 //SYSIN DD *
000016 SORT FIELDS=COPY
000017 /*
****** **************************** Bottom of Data ****************************
1
Example 1:
EDIT USERID.PAVAN.SORT.EXAMPLE(NEWJCL) - 01.54 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //SORTOT01 JOB (ACCT PARM),'TEST',
000002 // TIME=5,CLASS=3,MSGCLASS=T,MSGLEVEL=(1,1),NOTIFY=&SYSUID
000003 //*
000004 //SORT#04 EXEC PGM=SYNCSORT
000005 //SYSOUT DD SYSOUT=*
000006 //SYSPRINT DD SYSOUT=*
000007 //SORTIN DD DSN=USERID.PAVAN.SORT.INPUT.NEW,DISP=SHR
000008 //*
000009 //SORTWK01 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000010 //SORTWK02 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000011 //SORTWK03 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000012 //*
000013 //* SORTOUT : SORTOF**: STEPS SHOULD NOT HAVE
000014 //* DCB PARAMETERS. IT TAKES THE ATTRIBUTES FROM THE INPUT FILE.
000015 //* IF MENTIONED, IT SHOULD BE SAME AS INPUT FILE, OTHERWISE IT ABENDS,
000016 //* IRRESPECTIVE OF WHETHER OUTPUT RECL > OR < THAN THE INPUT RECL.
000017 //*
000018 //SORTOUT DD DSN=USERID.SORT.SORTOUT.OUTNEWP,
000019 //* DISP=(NEW,CATLG,DELETE),
000020 // DISP=(NEW,CATLG,CATLG),
000021 //* DCB=(RECFM=FB,LRECL=40,BLKSIZE=0),
000022 // RECFM=FB,LRECL=20,BLKSIZE=200,
000023 // UNIT=DISK,SPACE=(CYL,(1,2),RLSE)
000024 //*
000025 //******************************************************************
000026 //*$ORTPARM : IT CONVERTS SYSTEM RETURN CODE TO USER ABEND CODE.
000027 //*RC16=ABE GENERIC K.C. CNTL CARD TO CONVERT RC16 TO A U0016 ABEND
000028 //******************************************************************
000029 //*$ORTPARM DD DSN=USERID.TESTCTLCDLIB(KCTESORT),DISP=SHR
000030 //SYSIN DD DSN=USERID.PAVAN.SORT.EXAMPLE(NEWCTL),DISP=SHR
000031 //*
****** **************************** Bottom of Data ****************************
Input:
File-AID - Edit - USERID.PAVAN.SORT.INPUT.NEW ----------- COLUMNS 000001 000020
COMMAND ===> SCROLL ===> CSR
NAME MARKS
15/AN 5/NUM
(1-15) (16-20) Column numbers
1-------------- 2-------
****** ***************************** TOP OF DATA ******************-CAPS ON-**
000001 PAVAN REDDY 111 111 + 120 + 800 + 610 = 1641
000002 PAVAN KUMAR 120
000003 PRAVEEN KUMAR 230 -> 230
000004 PAVANI SHARMA 800
000005 PAVAN KUMA 610
000006 DHANANJAY 550 -> 550
000007 SOUJANYA 600 -> 600
000008 SOUHAN 150 -> 150
000009 ROHINI KUMAR 665 -> 1565
000010 ROHITH SHARMA 900
2
****** **************************** BOTTOM OF DATA ****************-CAPS ON-**
Output:
File-AID - Edit - USERID.SORT.SORTOUT.OUTNEWP ----------- COLUMNS 000001 000020
COMMAND ===> SCROLL ===> CSR
NAME MARKS
15/AN 5/NUM
(1-15) (16-20)
1-------------- 2-------
****** ***************************** TOP OF DATA ******************-CAPS ON-**
000001 DHANANJAY 550
000002 PAVAN REDDY 1641
000003 PRAVEEN KUMAR 230
000004 ROHINI KUMAR 1565
000005 SOUHAN 150
000006 SOUJANYA 600
****** **************************** BOTTOM OF DATA ****************-CAPS ON-**
This control card is used as layout for the file shown above.
EDIT USERID.PAVAN.SORT.EXAMPLE(NEWCPY) - 01.06 Member NEWCPY saved
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 01 STUDENT-REC.
000002 05 NAME PIC X(15).
000003 05 MARKS PIC 9(05).
****** **************************** Bottom of Data ****************************
Example 2:
EDIT USERID.PAVAN.SORT.EXAMPLE(MAY19JCL) - 01.34 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //SORTEX01 JOB (CDCGBIAC,SOR,TEST),'TEST',
000002 // TIME=5,CLASS=3,MSGCLASS=T,NOTIFY=&SYSUID
000003 //*
000004 //SORT#04 EXEC PGM=SYNCSORT
000005 //SYSOUT DD SYSOUT=*
000006 //SYSPRINT DD SYSOUT=*
000007 //SORTIN DD DSN=USERID.PAVAN.SORT.INPUT,DISP=SHR
000008 //SORTOUT DD DSN=USERID.SORT.OUTPUT,
000009 // DISP=(NEW,CATLG,DELETE),
000010 // RECFM=FB,LRECL=60,BLKSIZE=0,
000011 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000012 //*
000013 //******************************************************************
000014 //*IT CONVERTS SYSTEM RETURN CODE TO USER ABEND CODE.
000015 //*RC16=ABE GENERIC K.C. CNTL CARD TO CONVERT RC16 TO A U0016 ABEND
000016 //******************************************************************
000017 //$ORTPARM DD DSN=USERID.TESTCTLCDLIB(KCTESORT),DISP=SHR
000018 //SYSIN DD *
000019 SORT FIELDS=(1,2,PD,D)
000020 /*
000021 //*
****** **************************** Bottom of Data ****************************
3
****** **************************** Bottom of Data ****************************
LAYOUT: USERID.PAVAN.SORT.EXAMPLE(INCOPY)
FIELD
--------- FIELD LEVEL/NAME ---------- -PICTURE- -NUMBER START END LENGTH
SORT-COPY 1 40 40
5 EMP-ID S9(5) 1 1 3 3
5 DEPT X(10) 2 4 13 10
5 EMP-NAME X(22) 3 14 35 22
5 SALARY 9(5) 4 36 40 5
******************************* Bottom of data ********************************
Input:
File-AID - Edit - USERID.PAVAN.SORT.INPUT --------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10100 AMDO RAMA KRISHNA 1000
000002 10101 GTS VENKAT RANGA 300
000003 10002 GIS SIVA SANKAR NAIR 200
000004 10103 CSC ROHINI 10
000005 10100 CSC ROHINI 10
000006 19900 KEAN RAVI KATIPALLY 999
000007 20000 FSG HARISH CHANDRA 123
000008 19900 GTS PAVAN KUMAR REDDY 678
000009 9911 SMG DHANSHREE 11111
000010 9911 SMG DHANSHREE 11111
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output:
File-AID - Edit - USERID.SORT.OUTPUT -------------------- COLUMNS 000001 000060
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY FILLER
3/PS 10/AN 22/AN 5/NUM 20/AN
(1-3) (4-13) (14-35) (36-40) (41-60)
1------- 2--------- 3--------------------- 4------- 5-------------------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 20000 FSG HARISH CHANDRA 123 INVALID
000002 19900 KEAN RAVI KATIPALLY 999 INVALID
000003 19900 GTS PAVAN KUMAR REDDY 678 INVALID
000004 10100 AMDO RAMA KRISHNA 1000 INVALID
000005 10101 GTS VENKAT RANGA 300 INVALID
000006 10103 CSC ROHINI 10 INVALID
000007 10100 CSC ROHINI 10 INVALID
000008 10002 GIS SIVA SANKAR NAIR 200 INVALID
000009 9911 SMG DHANSHREE 11111 INVALID
000010 9911 SMG DHANSHREE 11111 INVALID
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
4
Example 3.0: SKIPREC=1,STOPAFT=3
EDIT USERID.PAVAN.SORT.EXAMPLE(JCL) - 01.36 Command name is invalid
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //SORTEX01 JOB (ACCT PARM),'TEST',
000002 // TIME=5,CLASS=3,MSGCLASS=T,NOTIFY=&SYSUID
000003 //*
000004 //SORT#04 EXEC PGM=SYNCSORT
000005 //SYSOUT DD SYSOUT=*
000006 //SYSPRINT DD SYSOUT=*
000007 //SORTIN DD DSN=USERID.PAVAN.SORT.INPUT,DISP=SHR
000008 //SORTOUT DD DSN=USERID.SORT.OUTPUT3,
000009 // DISP=(NEW,CATLG,DELETE),
000010 // RECFM=FB,LRECL=60,BLKSIZE=0,
000011 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000012 //SORTWK01 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000013 //SORTWK02 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000014 //SORTWK03 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000015 //******************************************************************
000016 //*IT CONVERTS SYSTEM RETURN CODE TO USER ABEND CODE.
000017 //*RC16=ABE GENERIC K.C. CNTL CARD TO CONVERT RC16 TO A U0016 ABEND
000018 //******************************************************************
000019 //$ORTPARM DD DSN=USERID.TESTCTLCDLIB(KCTESORT),DISP=SHR
000020 //SYSIN DD DSN=USERID.PAVAN.SORT.EXAMPLE(CTLCARD),DISP=SHR
000021 //*
****** **************************** Bottom of Data ****************************
Input:
File-AID - Edit - USERID.PAVAN.SORT.INPUT --------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10100 AMDO RAMA KRISHNA 1000 - Skipped
000002 10101 GTS VENKAT RANGA 300 - processed
000003 10002 GIS SIVA SANKAR NAIR 200 - processed
000004 10103 CSC ROHINI 10 - duplicate as rec2
000005 10100 CSC ROHINI 10 == stopped after 3
records
000006 19900 KEAN RAVI KATIPALLY 999
000007 20000 FSG HARISH CHANDRA 123
000008 19900 GTS PAVAN KUMAR REDDY 678
000009 9911 SMG DHANSHREE 11111
000010 9911 SMG DHANSHREE 11111
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output:
File-AID - Edit - USERID.SORT.OUTPUT3 ------------------- COLUMNS 000001 000060
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY FILLER
3/PS 10/AN 22/AN 5/NUM 20/AN
(1-3) (4-13) (14-35) (36-40) (41-60)
1------- 2--------- 3--------------------- 4------- 5-------------------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
5
000001 10002 GIS SIVA SANKAR NAIR 200 INVALID
000002 10101 GTS VENKAT RANGA 300 INVALID
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Example 4:
EDIT USERID.PAVAN.SORT.EXAMPLE(JCL) - 01.47 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //SORTEX01 JOB (ACCT PARM),'TEST',
000002 // TIME=5,CLASS=3,MSGCLASS=T,MSGLEVEL=(1,1),NOTIFY=&SYSUID
000003 //*
000004 //SORT#04 EXEC PGM=SYNCSORT
000005 //SYSOUT DD SYSOUT=*
000006 //SYSPRINT DD SYSOUT=*
000007 //SORTIN DD DSN=USERID.PAVAN.SORT.INPUT,DISP=SHR
000008 //*
6
000009 //SORTWK01 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000010 //SORTWK02 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000011 //SORTWK03 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000012 //*
000013 //* SORTOF**: STEPS SHOULD NOT HAVE DCB PARAMETERS. IT TAKES
000014 //* THE ATTRIBUTES FROM THE INPUT FILE.
000015 //* IF MENTIONED, IT SHOULD BE SAME AS INPUT FILE, OTHERWISE IT ABENDS,
000016 //* IRRESPECTIVE OF WHETHER OUTPUT RECL > OR < THAN THE INPUT RECL.
000017 //*
000018 //*FIND THE EXAMPLE MENTIONED IN SORTOF01.
000019 //*APPLICABLE FOR OTHERS ALSO SORTOF0*
000020 //*
000021 //SORTOF01 DD DSN=USERID.SORT.OF01,
000022 // DISP=(NEW,CATLG,DELETE),
000023 //* DCB=(RECFM=FB,LRECL=40,BLKSIZE=0),
000024 //* RECFM=FB,LRECL=40,BLKSIZE=0,
000025 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000026 //SORTOF02 DD DSN=USERID.SORT.OF02,
000027 // DISP=(NEW,CATLG,DELETE),
000028 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000029 //SORTOF03 DD DSN=USERID.SORT.OF03,
000030 // DISP=(NEW,CATLG,DELETE),
000031 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000032 //SORTOF04 DD DSN=USERID.SORT.OF04,
000033 // DISP=(NEW,CATLG,DELETE),
000034 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000035 //SORTOF05 DD DSN=USERID.SORT.OF05,
000036 // DISP=(NEW,CATLG,DELETE),
000037 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000038 //*
000039 //******************************************************************
000040 //*IT CONVERTS SYSTEM RETURN CODE TO USER ABEND CODE.
000041 //*RC16=ABE GENERIC K.C. CNTL CARD TO CONVERT RC16 TO A U0016 ABEND
000042 //******************************************************************
000043 //$ORTPARM DD DSN=USERID.TESTCTLCDLIB(KCTESORT),DISP=SHR
000044 //* OUTFIL FILES=01,INCLUDE=(1,2,PD,EQ,1010') => NO RECORDS PICKED UP
000045 //* OUTFIL FILES=02,INCLUDE=(1,2,PD,EQ,1000') => NO RECORDS PICKED UP
000046 //* OUTFIL FILES=03,INCLUDE=(1,2,PD,EQ,0991') => NO RECORDS PICKED UP
000047 //* NO RECORDS PICKED UP AS 1/2 BYTE IS USED FOR SIGN.
000048 //*
000049 //* INCLUDE=(1,2,PD,EQ,X'0991')--> X'0991' IS INCORRECT SYNTACTICALLY
000050 //*
000051 //* OUTFIL FILES=03,INCLUDE=(1,2,PD,EQ,'9) -> '9 IS INVALID
000052 //* EVEN THOUGH ' IS SHOWN,IN HEX ON FORMAT WHEN THE I/P FILE IS VIEWED'
000053 //* 79 = ' IN HEXA FORMAT
000054 //*
000055 //SYSIN DD DSN=USERID.PAVAN.SORT.EXAMPLE(CARD),DISP=SHR
000056 //*
****** **************************** Bottom of Data ****************************
7
****** ***************************** Top of Data ******************************
000001 SORT FIELDS=(1,2,PD,A)
000002 OUTFIL FILES=01,INCLUDE=(1,2,PD,EQ,101)
000003 OUTFIL FILES=02,INCLUDE=(1,2,PD,EQ,+610) => Whether you add plus (+)
000004 OUTFIL FILES=03,INCLUDE=(1,2,PD,EQ,+788) => sign or not it doesn’t
make difference. Above card and this doesn’t have any difference.
000005 OUTFIL FILES=04,INCLUDE=(1,2,PD,EQ,810)
000006 OUTFIL FILES=05,INCLUDE=(1,2,PD,EQ,100)
****** **************************** Bottom of Data ****************************
LAYOUT: USERID.PAVAN.SORT.EXAMPLE(INCOPY)
FIELD
--------- FIELD LEVEL/NAME ---------- -PICTURE- -NUMBER START END LENGTH
SORT-COPY 1 40 40
5 EMP-ID S9(5) 1 1 3 3
5 DEPT X(10) 2 4 13 10
5 EMP-NAME X(22) 3 14 35 22
5 SALARY 9(5) 4 36 40 5
******************************* Bottom of data ********************************
Input file:
File-AID - Edit - USERID.PAVAN.SORT.INPUT --------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10100 AMDO RAMA KRISHNA 1000
000002 10101 GTS VENKAT RANGA 300
000003 10002 GIS SIVA SANKAR NAIR 200
000004 10103 CSC ROHINI 10
000005 10100 CSC ROHINI 10
000006 69900 KEAN RAVI KATIPALLY 999
000007 61000 FSG HARISH CHANDRA 123
000008 79900 GTS PAVAN KUMAR REDDY 678
000009 81000 SMG DHANSHREE 11111
000010 78800 GTS KISHORE KUMAR 678
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output file 2:
File-AID - Edit - USERID.SORT.OF02 ---------------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
8
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 61000 FSG HARISH CHANDRA 123
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output file 3:
File-AID - Edit - USERID.SORT.OF03 ---------------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 78800 GTS KISHORE KUMAR 678
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output file 4:
File-AID - Edit - USERID.SORT.OF04 ---------------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 81000 SMG DHANSHREE 11111
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output file 5:
File-AID - Edit - USERID.SORT.OF05 ---------------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10002 GIS SIVA SANKAR NAIR 200
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Spool Information:
Errors I faced:
Ran with duplicate outfil names i.e. FILES=03 specified thrice.
Hence, got the error SORTOF03 DUPLICATE OUTFIL SPECIFICATION
OUTFIL FILES=03,INCLUDE=(1,2,PD,EQ,799)
OUTFIL FILES=03,INCLUDE=(1,2,PD,EQ,809)
OUTFIL FILES=03,INCLUDE=(1,2,PD,EQ,798)
9
OUTFIL FILES=03,INCLUDE=(1,2,PD,EQ,798)
WER190A SORTOF03 DUPLICATE OUTFIL SPECIFICATION
WER211B SYNCSMF CALLED BY SYNCSORT; RC=0000
******************************* Bottom of Data ********************************
Example 5:
VIEW USERID.PAVAN.SORT.EXAMPLE(JCL2) - 01.48 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //SORTEX01 JOB (ACCT PARM),'TEST',
000002 // TIME=5,CLASS=3,MSGCLASS=T,MSGLEVEL=(1,1),NOTIFY=&SYSUID
000003 //*
000004 //SORT#04 EXEC PGM=SYNCSORT
000005 //SYSOUT DD SYSOUT=*
000006 //SYSPRINT DD SYSOUT=*
000007 //SORTIN DD DSN=USERID.SORTXSUM.INPUT,DISP=SHR
000008 //*
000009 //SORTWK01 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000010 //SORTWK02 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000011 //SORTWK03 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000012 //*
000013 //* SORTOF**: STEPS SHOULD NOT HAVE DCB PARAMETERS. IT TAKES
000014 //* THE ATTRIBUTES FROM THE INPUT FILE.
000015 //* IF MENTIONED, IT SHOULD BE SAME AS INPUT FILE, OTHERWISE IT ABENDS,
000016 //* IRRESPECTIVE OF WHETHER OUTPUT RECL > OR < THAN THE INPUT RECL.
000017 //*
000018 //SORTOUT DD DSN=USERID.SORT.SORTOUT,
000019 // DISP=(NEW,CATLG,DELETE),
000020 //* DCB=(RECFM=FB,LRECL=40,BLKSIZE=0),
000021 //* RECFM=FB,LRECL=40,BLKSIZE=0,
000022 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000023 //SORTXSUM DD DSN=USERID.SORT.SORTXSUM,
000024 // DISP=(NEW,CATLG,DELETE),
000025 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000026 //******************************************************************
000027 //*IT CONVERTS SYSTEM RETURN CODE TO USER ABEND CODE.
000028 //*RC16=ABE GENERIC K.C. CNTL CARD TO CONVERT RC16 TO A U0016 ABEND
000029 //******************************************************************
000030 //$ORTPARM DD DSN=USERID.TESTCTLCDLIB(KCTESORT),DISP=SHR
000031 //*
000032 //SYSIN DD DSN=USERID.PAVAN.SORT.EXAMPLE(CARD),DISP=SHR
000033 //*
****** **************************** Bottom of Data ****************************
Input file:
File-AID - Edit - USERID.SORTXSUM.INPUT ----------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10100 AMDO RAMA KRISHNA 1000
000002 10101 GTS VENKAT RANGA 300
000003 10002 GIS SIVA SANKAR NAIR 200
10
000004 10103 CSC ROHINI 10
000005 69900 CSC ROHINI 10
000006 69900 KEAN RAVI KATIPALLY 999
000007 79900 GTS PAVAN KUMAR REDDY 678
000008 78800 GTS KISHORE KUMAR 678
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
SORTXSUM:
File-AID - Edit - USERID.SORT.SORTXSUM ------------------ COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10101 GTS VENKAT RANGA 300
000002 10103 CSC ROHINI 10
000003 69900 KEAN RAVI KATIPALLY 999
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Example 6
EDIT USERID.PAVAN.SORT.EXAMPLE(JCL3) - 01.48 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //SORTOF01 JOB (ACCT PARM),'TEST',
000002 // TIME=5,CLASS=3,MSGCLASS=T,MSGLEVEL=(1,1),NOTIFY=&SYSUID
000003 //*
000004 //SORT#04 EXEC PGM=SYNCSORT
000005 //SYSOUT DD SYSOUT=*
000006 //SYSPRINT DD SYSOUT=*
000007 //SORTIN DD DSN=USERID.PAVAN.SORT.INPUT,DISP=SHR
000008 //*
000009 //SORTWK01 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000010 //SORTWK02 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000011 //SORTWK03 DD UNIT=DISK,SPACE=(472,(888,176),RLSE),AVGREC=K
000012 //*
000013 //* SORTOF**: STEPS SHOULD NOT HAVE DCB PARAMETERS. IT TAKES
000014 //* THE ATTRIBUTES FROM THE INPUT FILE.
000015 //* IF MENTIONED, IT SHOULD BE SAME AS INPUT FILE, OTHERWISE IT ABENDS,
000016 //* IRRESPECTIVE OF WHETHER OUTPUT RECL > OR < THAN THE INPUT RECL.
000017 //*
000018 //*FIND THE EXAMPLE MENTIONED IN SORTOF01.
000019 //*APPLICABLE FOR OTHERS ALSO SORTOF0*
000020 //*
000021 //SORTOF01 DD DSN=USERID.SORT.START.OF01,
11
000022 // DISP=(NEW,CATLG,DELETE),
000023 //* DCB=(RECFM=FB,LRECL=40,BLKSIZE=0),
000024 //* RECFM=FB,LRECL=40,BLKSIZE=0,
000025 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000026 //SORTOF02 DD DSN=USERID.SORT.START.OF02,
000027 // DISP=(NEW,CATLG,DELETE),
000028 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000029 //SORTOF03 DD DSN=USERID.SORT.START.OF03,
000030 // DISP=(NEW,CATLG,DELETE),
000031 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000032 //*
000033 //******************************************************************
000034 //*IT CONVERTS SYSTEM RETURN CODE TO USER ABEND CODE.
000035 //*RC16=ABE GENERIC K.C. CNTL CARD TO CONVERT RC16 TO A U0016 ABEND
000036 //******************************************************************
000037 //$ORTPARM DD DSN=USERID.TESTCTLCDLIB(KCTESORT),DISP=SHR
000038 //SYSIN DD DSN=USERID.PAVAN.SORT.EXAMPLE(CARD3),DISP=SHR
000039 //*
****** **************************** Bottom of Data ****************************
Input file:
File-AID - Edit - USERID.PAVAN.SORT.INPUT --------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10100 AMDO RAMA KRISHNA 1000
000002 10101 GTS VENKAT RANGA 300
000003 10002 GIS SIVA SANKAR NAIR 200
000004 10103 CSC ROHINI 10
000005 10100 CSC ROHINI 10
000006 69900 KEAN RAVI KATIPALLY 999
000007 61000 FSG HARISH CHANDRA 123
000008 79900 GTS PAVAN KUMAR REDDY 678
000009 81000 SMG DHANSHREE 11111
000010 78800 GTS KISHORE KUMAR 678
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
12
000006 61000 FSG HARISH CHANDRA 123
000007 69900 KEAN RAVI KATIPALLY 999
000008 78800 GTS KISHORE KUMAR 678
000009 79900 GTS PAVAN KUMAR REDDY 678
000010 81000 SMG DHANSHREE 11111
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output file 2:
File-AID - Edit - USERID.SORT.START.OF02 ---------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10100 CSC ROHINI 10
000002 61000 FSG HARISH CHANDRA 123
000003 69900 KEAN RAVI KATIPALLY 999
000004 78800 GTS KISHORE KUMAR 678
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output file 3:
File-AID - Edit - USERID.SORT.START.OF03 ---------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
EMP-ID DEPT EMP-NAME SALARY
3/PS 10/AN 22/AN 5/NUM
(1-3) (4-13) (14-35) (36-40)
1------- 2--------- 3--------------------- 4-------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 10100 CSC ROHINI 10
000002 61000 FSG HARISH CHANDRA 123
000003 69900 KEAN RAVI KATIPALLY 999
000004 78800 GTS KISHORE KUMAR 678
000005 79900 GTS PAVAN KUMAR REDDY 678
000006 81000 SMG DHANSHREE 11111
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Spool information
BROWSE -- SORTOF01.J11516.SORT#04.SYSOUT ----------- Line 00000021 Col 001 080
Command ===> Scroll ===> CSR
WER036B G=100,B=1330
WER045C END SORT PHASE
WER418I DATASPACE(S) AND/OR HIPERSPACE(S) USED
WER405I SORTOF01 : DATA RECORDS OUT 10; TOTAL RECORDS OUT 10
WER405I SORTOF02 : DATA RECORDS OUT 4; TOTAL RECORDS OUT 4
WER405I SORTOF03 : DATA RECORDS OUT 6; TOTAL RECORDS OUT 6
WER211B SYNCSMF CALLED BY SYNCSORT; RC=0000
WER416B SORTIN : EXCP'S=1,UNIT=3390,DEV=5F17,CHP=(F8F9FAFDFEFF,1),VOL=CSO015
WER416B OUTFIL WAS USED FOR SORTOUT
WER246I FILESIZE 400 BYTES
WER054I RCD IN 10, OUT 10
WER072I EQUALS IN EFFECT
WER169I RELEASE 1.2 BATCH 0454 TPF LEVEL 2.3
WER052I END SYNCSORT - SORTOF01,SORT#04,,DIAG=9B00,4003,A219,EC7F,D2E6,6C8B,22
13
000004 //SORT#04 EXEC PGM=SYNCSORT,COND=(0,NE)
000005 //SYSOUT DD SYSOUT=*
000006 //SYSPRINT DD SYSOUT=*
000007 //SORTIN DD DSN=USERID.INOUTREC.INPUT,DISP=SHR
000008 //SORTOUT DD DSN=USERID.INOUTREC.OUTPUT.MAY16,
000009 // DISP=(NEW,CATLG,DELETE),
000010 // RECFM=FB,LRECL=80,BLKSIZE=0,
000011 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000012 //******************************************************************
000013 //*IT CONVERTS SYSTEM RETURN CODE TO USER ABEND CODE.
000014 //*RC16=ABE GENERIC K.C. CNTL CARD TO CONVERT RC16 TO A U0016 ABEND
000015 //******************************************************************
000016 //*$ORTPARM DD DSN=USERID.TESTCTLCDLIB(KCTESORT),DISP=SHR
000017 //SYSIN DD DSN=USERID.PAVAN.TEST(CTRLCARD),DISP=SHR
000018 //*
****** **************************** Bottom of Data ****************************
ELF HE
ATE NO
R FRND
IST DO
28,4 : Then the data from 28,29,30,31 from input file copied to successive
positions in the output file.
417M
263R
431D
177M
14
000002 05 NAME PIC X(20).
000003 05 MONEY PIC S9(5)V9(2) COMP-3.
000004 05 COUNT PIC 9(6).
000005 05 RELATION PIC X(10).
****** **************************** Bottom of Data ****************************
Input file:
File-AID - Edit - USERID.INOUTREC.INPUT ----------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
NAME MONEY COUNT RELATION
20/AN 4/PS 6/NUM 10/AN
(1-20) (21-24) (25-30) (31-40)
1------------------- 2-------- 3------- 4---------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 PAVAN KUMAR REDDY.K 11001.00 223417 MYSELF HEY
000002 SHANKAR DAYAL SHARMA 11000.00 232263 RELATE NOP
000003 DHANASHREE SUKTHANK -10058.34 187431 DEAR FRNDS
000004 SAMBA SIVA RAO ANNA 100.00 225177 MAOIST DON
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output file:
VIEW USERID.INOUTREC.OUTPUT.MAY16 Columns 00001 00072
Command ===> Scroll ===> CSR
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 AR REDDY.K***ELF HE $ 417M
000002 AYAL SHARM***ATE NO $ 263R
000003 A RAO ANNA***IST DO $ 177M
****** **************************** Bottom of Data ****************************
Example 8:
EDIT USERID.PAVAN.TEST(CJCLOUT) - 01.24 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //SORT001 JOB (ACCT PARM),'TEST',
000002 // TIME=5,CLASS=3,MSGCLASS=T,NOTIFY=&SYSUID
000003 //*
000004 //SORT#04 EXEC PGM=SYNCSORT,COND=(0,NE)
000005 //SYSOUT DD SYSOUT=*
000006 //SYSPRINT DD SYSOUT=*
000007 //SORTIN DD DSN=USERID.INOUTREC.INPUT,DISP=SHR
000008 //SORTOUT DD DSN=USERID.INOUTREC.OUTPUTX,
000009 // DISP=(NEW,CATLG,DELETE),
000010 // RECFM=FB,LRECL=80,BLKSIZE=0,
000011 // UNIT=DISK,SPACE=(CYL,(50,20),RLSE)
000012 //******************************************************************
000013 //*IT CONVERTS SYSTEM RETURN CODE TO USER ABEND CODE.
000014 //*RC16=ABE GENERIC K.C. CNTL CARD TO CONVERT RC16 TO A U0016 ABEND
000015 //******************************************************************
000016 //*$ORTPARM DD DSN=USERID.TESTCTLCDLIB(KCTESORT),DISP=SHR
000017 //SYSIN DD DSN=USERID.PAVAN.TEST(INRECDUP),DISP=SHR
000018 //*
****** **************************** Bottom of Data ****************************
15
000005 NOMATCH=(C'NOMATCH'))
****** **************************** Bottom of Data ****************************
Input file:
File-AID - Edit - USERID.INOUTREC.INPUT ----------------- COLUMNS 000001 000040
COMMAND ===> SCROLL ===> CSR
NAME MONEY COUNT RELATION
20/AN 4/PS 6/NUM 10/AN
(1-20) (21-24) (25-30) (31-40)
1------------------- 2-------- 3------- 4---------
****** ***************************** TOP OF DATA ******************-CAPS OFF-*
000001 PAVAN KUMAR REDDY.K 11001.00 223417 MYSELF HEY
000002 SHANKAR DAYAL SHARMA 11000.00 232263 RELATE NOP
000003 DHANASHREE SUKTHANK -10058.34 187431 DEAR FRNDS
000004 SAMBA SIVA RAO ANNA 100.00 225177 MAOIST DON
****** **************************** BOTTOM OF DATA ****************-CAPS OFF-*
Output file:
VIEW USERID.INOUTREC.OUTPUTX Columns 00001 00072
Command ===> Scroll ===> CSR
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 AR REDDY.K*** ELF HE $ CHANGED
000002 AYAL SHARM*** ATE NO $ DELETE
000003 E SUKTHANK*** R FRND $ DELETE
000004 A RAO ANNA*** IST DO $ NOMATCH
****** **************************** Bottom of Data ****************************
16
to the output file.
2----+---
*********
ELF HE
ATE NO
R FRND
IST DO
1. ALTSEQ , CODE.
//EXAMP JOB A400,PROGRAMMER 01
//S1 EXEC PGM=SORT 02
//SYSOUT DD SYSOUT=A 03
//SORTIN DD DSN=A123456.IN5,DISP=SHR 04
//SORTOUT DD DSN=OUT1,UNIT=3490,DISP=(,KEEP),VOL=SER=VOL001 05
//SORTWK01 DD UNIT=3390,SPACE=(CYL,(10,10)) 06
//SORTWK02 DD UNIT=3390,SPACE=(CYL,(10,10)) 07
//SYSIN DD * 08
* COLLATE $, # and @ AFTER Z 09
SORT FIELDS=(7,5,AQ,A) 10
ALTSEQ CODE=(5BEA,7BEB,7CEC)
ALTSEQ statement. CODE specifies that the three characters $, # and @ are to
collate in that order after Z.
17
Species (D = dog, C = cat, R = rabbit) in position 10:
Let's assume I desire the following output with the name remaining in positions
1-8, a blank in position 9, the gender (recoded as 1 if male & as 2, if female)
in position 10, a blank in position 11, and the species (spelled out as DOG,
CAT, or OTHER) in positions 12-16:
BUFFY 2 DOG
WAFFLES 1 CAT
OREO 1 OTHER
HERSHEYS 2 CAT
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1:1,8, NAME
9:1X, BLANK
10:9,1,CHANGE=(1,C'M',C'1', RECODE GENDER
C'F',C'2'),
11:1X, BLANK
12:10,1,CHANGE=(5,C'D',C'DOG ', RECODE SPECIES
C'C',C'CAT '),
NOMATCH=(C'OTHER'))
Let's quickly explain the last field: 12 is the position in the output record,
10 is the position in the input record, 1 is the length in the input record, 5
is the length in the output record, C'D' and C'C' are the change-from values,
and C'DOG ' and C'CAT ' are the change-to values. Note the NOMATCH operand is
optional (it wasn't used with gender), but if it is omitted and an unmatched
condition is encountered, SyncSort will ABEND with U0016 return code. As always,
be careful of misplaced blanks, commas and parentheses. Proper alignment is not
required by SyncSort, but may be required by your peers!
EQ equality
NE not equal
GT greater than
18
GE greater than or equal to
LT less than
LE less than or equal to
OMIT COND=(1,1,BI,EQ,X'FF',OR,8,5,PD,LT,+1)
Any record containing X'FF' in the 1st byte OR a packed decimal
value less than 1 in the 5 byte field starting in column 8 should
be omitted from the output.
One advantage by uncomment is, output file will not get created if the job
abend. But in previous step where $ortparm is commented, we have to delete for
each unsuccessful execution to rerun the same job
6. DFSORT, SYNCSORT
Table 50. Summary Field Formats and Lengths
19
Format Code Length Description
BI BI 2, 4, or 8 bytes Unsigned binary
FI 2, 4, or 8 bytes Signed fixed-point
| FL 4, 8, or 16 bytes
| Signed hexadecimal
| floating-point
|
PD 1 to 16 bytes Signed packed decimal
ZD 1 to 31 bytes Signed zoned decimal
If you come across such errors which can be general shown in red below.
Give a pack off and try submitting the same job.
BROWSE -- SORTEX01.J09821.SORT#04.SYSOUT ----------- Line 00000000 Col 001 080
Command ===> Scroll ===> CSR
******************************** Top of Data **********************************
SYNCSORT FOR Z/OS 1.2.2.3R U.S. PATENTS: 4210961, 5117495 (C) 2005 SYNCSO
z/OS 1.8.0
PRODUCT LICENSED FOR CPU SERIAL NUMBER 53B6C, MODEL 2086 460 LICEN
$ORTPARM : RC16=ABE
SYSIN :
.. F...&.oSORT FIELDS=(1,2,PD,A),..þSUM FIELDS=NONE..
*
WER161B ALTERNATE PARM USED
WER275A NO KEYWORDS FOUND ON CONTROL STATEMENT
WER211B SYNCSMF CALLED BY SYNCSORT; RC=0000
WER449I SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE
******************************* Bottom of Data ********************************
9. ELIMINATE DUPLICATES
//SYSIN DD *
SORT FIELDS=(1,3,CH,A)
SUM FIELDS=NONE
/*
Input file has following data and structure
INPUT FILE
MOHANK 23423423434534344 KIRAN
MOHANK 13342345345345345 RAJEEV
ARAMES 34535345325354324 SURESH
SURESH 98347385385933987 PULI
RAMESH 67575789769876785 MADHU
KRISHN 50830948530859340 OIIED
KRISHN 30495849572938495 MADHU
SURESH 98347385385933987 PULI
OUTFILE
ARAMES 34535345325354324 SURESH
KRISHN 50830948530859340 OIIED
20
MOHANK 23423423434534344 KIRAN
RAMESH 67575789769876785 MADHU
SURESH 98347385385933987 PULI
EXPLANATION
If we give SUM FIELDS=NONE it will eliminate duplicates
Input file:
INPUT FILE
MOHANK 23423423434534344 KIRAN
MOHANK 13342345345345345 RAJEEV
ARAMES 34535345325354324 SURESH
SURESH 98347385385933987 PULI
RAMESH 67575789769876785 MADHU
KRISHN 50830948530859340 OIIED
KRISHN 30495849572938495 MADHU
SURESH 98347385385933987 PULI
Output files:
SORTOF01
MOHANK 23423423434534344 KIRAN
MOHANK 13342345345345345 RAJEEV
SORTOF02
SURESH 98347385385933987 PULI
SURESH 98347385385933987 PULI
SORTOF03
21
KRISHN 50830948530859340 OIIED
KRISHN 30495849572938495 MADHU
EXPLANATION
1. SORT FIELDS=COPY - indicate, it for copy of records, not for sort
2. OUTFIL FILES=01,INCLUDE=(1,6,CH,EQ,C'MOHANK')
OUTFIL FILES=02,INCLUDE=(1,6,CH,EQ,C'SURESH')
OUTFIL FILES=03,INCLUDE=(1,6,CH,EQ,C'KRISHN')
- SYNCSORT will take data from 1st position to 6th position of input
file and it will compare that data with MOHANK or SURESH or KRISHN
- If data equals to MOHANK then that record will copies to dataset
defined in SORTOF01 step. ( because we defined FILES=01 in second
condition )
- If data equals to SURESH then that record will pass to dataset
defined in SORTOF02 step. ( because we defined FILES=02 in second
condition )
- If data equals to KRISHN then that record will copied to dataset defined in
SORTOF03 step. ( because we defined FILES=03 in third condition )
SORTOUT
ARAMES 34535345325354324 SURESH
KRISHN 50830948530859340 OIIED
MOHANK 23423423434534344 KIRAN
RAMESH 67575789769876785 MADHU
SURESH 98347385385933987 PULI
SORTXSUM
KRISHN 30495849572938495 MADHU
MOHANK 13342345345345345 RAJEEV
22
SURESH 98347385385933987 PULI
EXPLANATION
1. SORT FIELDS=(1,3,CH,A)
Input file will be sorted depending up on the key specified above
1,3,CH,A - key starting position is 1 and length 3, comparing type
character, sorting is don in ascending order
2. SUM FIELDS=NONE,XSUM
SUM FIELDS=NONE means it will eliminate duplicates
XSUM options will copy all records eliminated in sort
process will copy to another data set defined in SORTXSUM step.
//SYSIN DD *
SORT FIELDS=COPY
INREC FIELDS=(7:2,5,20:8,3)
/*
INREC FIELDS=(7:2,5,20:8,3)
- Output position: 7,8,9,10,11,
Input – from 2 to 5
- Output position: 20,21,22,23,24,25,
Input – from 8,9,10
OUTPUT FILE
OHANK 342
OHANK 334
RAMES 453
URESH 834
AMESH 757
RISHN 083
RISHN 049
URESH 834
EXPLANATION
1. SORT FIELDS=COPY
It is for copy records to output file
2. INREC FIELDS=(7:2,5,20:10,3) (for formatting)
Here we have two formatting,
1. 7:2,5 - data at 2nd position of input file with length 5
copied to 7th position of output file
2. 20:8,3 - data at 8th position of input file with length 3
copied to 20th position of output file
23
INREC adds, deletes, or reformats fields before the
records are sorted or merged. so that performance will
be improved
EQ equality
NE not equal
GT greater than
GE greater than or equal to
LT less than
LE less than or equal to
OMIT COND=(1,1,BI,EQ,X'FF',OR,8,5,PD,LT,+1)
Any record containing X'FF' in the 1st byte OR a packed decimal
value less than 1 in the 5 byte field starting in column 8 should
be omitted from the output.
13. FILSZ
//SORTSTEP EXEC PGM=SYNCSORT
//SORTIN DD DSN=Z123456.INPUT,DISP=SHR
//SORTOUT DD DSN=Z123456.SORTED,DISP=(NEW,PASS,DELETE),
// UNIT=DISK,VOL=SER=ACA301,SPACE=(TRK,(1,1))
//SYSOUT DD SYSOUT=*
//SORTWK01 DD DSN=&&SORTWK01,UNIT=PUB,DISP=(NEW,DELETE),
// SPACE=(TRK,(1,1))
//SYSIN DD *
SORT FIELDS=(2,4,CH,A,8,5,PD,D),
SKIPREC=1
FILSZ=E400 It means there are estimated records of 400.
Using this and LRECL, sort program will
calculate the amount of work storage required.
/*
The above step will:
1. Skip the first record
2. Sort the remaining records in Ascending order based on the
Characters in the 4 byte field starting in position
2.
3. If there is a match, sort in Descending order based on the
Packed Decimal number in the 5 byte field
starting in position 8.
4. The file will contain an estimated 400 records
24
14. To sort and shift fields, CORE=MAX, PARM='DYNALLOC',
//* To sort and shift fields
//SORTIT EXEC PGM=SORT,PARM=’ABEND’
//SYSOUT DD SYSOUT=*
//SORTIN DD * number in column 1, name in 10, state in 19
9283873 JOAN CT
7023232 JANE CN
8432343 MARIO MA
5549023 JILL CT
/*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
* sort by name
SORT FIELDS=(10,09,CH,A),DYNALLOC=(SYSDA,6),FILSZ=E2000
Described below.
OUTREC FIELDS=(01:10,09, move name from 10 to 1
10:01,07) move number from 1 to 10
* OutREC moves data after sorting ends.
/*
//* END OF JOB
DYNALLOC
Specifies that the host sort utility supports dynamic allocation of any
necessary work files.
One of the reasons for getting SORT INTERNAL ERROR - RECOVERY ATTEMPT IN
PROGRESS from Sync sort is due to assigning the incorrect value (very less file
size value) to FILSZ parm in SORT card.
The value assigned to FILSZ parm should be greater than number of records in the
input file (or nearer to input file record count).
For example:
If we assign 1500000 to FILSZ and if we process 10539694 records.
And this is leading to the infinite loop in getting the extra storage.
FILSZ=E1500000 E stands for estimated. If you know the exact count,
just mention the count of records ignoring the
beginning character ‘E’.
To determine the input file size for a sort application. DFSORT performs
calculations based on the user supplied record count and other parameters (such
as AVGRLEN) to estimate the total number of bytes to be sorted. This value is
important for sort applications, since it is used for several internal
optimizations as well as for dynamic work data set allocation (see OPTION
DYNALLOC). If no input record count (or only an estimate) is supplied for the
sort application, DFSORT attempts to automatically compute the file size to be
used for the optimizations and allocations.
U can give more sortwork areas too if you still have a problem. This will create
temporary sort areas and are used while sorting large files. The syntax is
specified below.
//SORTWKnn DD UNIT=SYSDA,SPACE=(CYL,(1,1)
However the SORTWK should not be specified for copy or merge utitlity if the
DYNALLOC parm is used
25
15. Find the records with the matching criteria.
SORT FIELDS=COPY
INCLUDE COND= (1, 80, SS, EQ, C'FIND STRING')
Here,
SS - Sub string,
1 - Starting position of the range
80 - Width of the search range
EQ - Comparison operators
The Sort card for this will need information like range of columns within which
you want the search to be performed. To search in the whole file you can give
the start position as 1 and LRECL of the file as the width of the search range
as done above. We can also replace the 'EQ' parameter by 'NE' which will fetch
us all the records which don't
have the specified string. Only EQ & NE can be used for comparison. We can even
use OMIT COND instead of INCLUDE.
This can also be used to find the records with string that match one of the
strings in the COND.
For example
SORT FIELDS=COPY
INCLUDE COND= (1, 80, SS, EQ, C'HDR,TRL')
The above sort card returns all records with the substring ' HDR' or
'TRL' occurring within the search range(1-80) of the record in the
input file.
OUTFIL FNAMES=OUTFIL2,
INCLUDE=685,11,CH,EQ,C' ',AND,681,01,CH,EQ,C'I')
/*
R16=ABE ==> Step will ABEND if return code is 16, ignoring this would mean
return code will be 16 but no abend will happen.
26