Frank Yaeger Sort Forum Moderator

Joined: 02 Dec 2002 Posts: 1618 Topics: 31 Location: San Jose
|
Posted: Thu Aug 14, 2003 10:43 am Post subject: |
|
|
Vineet,
You can do this with the SPLICE operator of DFSORT's ICETOOL as illustrated by the DFSORT/ICETOOL job below.
You didn't give any information about the RECFM and LRECL of your four input files, or what the records actually look like, so I made the following assumptions for the example:
Each input file has RECFM=FB and LRECL=20. The input files look like this:
Code: |
Input file1
KEY1 FILE1 RECORD01>
KEY2 FILE1 RECORD02>
KEY3 FILE1 RECORD03>
Input file2
KEY1 FILE2 RECORD01>
KEY2 FILE2 RECORD02>
KEY3 FILE2 RECORD03>
Input file3
KEY1 FILE3 RECORD01>
KEY2 FILE3 RECORD02>
KEY3 FILE3 RECORD03>
Input file4
KEY1 FILE4 RECORD01>
KEY2 FILE4 RECORD02>
KEY3 FILE4 RECORD03>
|
Here's the DFSORT/ICETOOL job:
Code: |
//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//A1 DD DSN=... input file1
//A2 DD DSN=... input file2
//A3 DD DSN=... input file3
//A4 DD DSN=... input file4
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//T2 DD DSN=&&T2,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//T3 DD DSN=&&T3,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//T4 DD DSN=&&T4,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//CON DD DSN=*.T1,VOL=REF=*.T1,DISP=(OLD,PASS)
// DD DSN=*.T2,VOL=REF=*.T2,DISP=(OLD,PASS)
// DD DSN=*.T3,VOL=REF=*.T3,DISP=(OLD,PASS)
// DD DSN=*.T4,VOL=REF=*.T4,DISP=(OLD,PASS)
//COMBINE DD DSN=... output file
//TOOLIN DD *
* Reformat File1-File4 records for splicing
COPY FROM(A1) TO(T1) USING(CTL1)
COPY FROM(A2) TO(T2) USING(CTL2)
COPY FROM(A3) TO(T3) USING(CTL3)
COPY FROM(A4) TO(T4) USING(CTL4)
* Splice File2-File4 data into File1 records
SPLICE FROM(CON) TO(COMBINE) ON(1,4,CH) -
WITHEACH WITH(21,20) WITH(41,20) WITH(61,20)
/*
//CTL1CNTL DD *
* Reformat File1 records to:
* |Key|F1Data|blanks|blanks|blanks|
1 21 41 61 80
OUTREC FIELDS=(1,20,80:X)
/*
//CTL2CNTL DD *
* Reformat File2 records to:
* |Key|blanks|F2Data|blanks|blanks|
1 21 41 61 80
OUTREC FIELDS=(1:1,4,21:1,20,80:X)
/*
//CTL3CNTL DD *
* Reformat File3 records to:
* |Key|blanks|blanks|F3Data|blanks|
1 21 41 61 80
OUTREC FIELDS=(1:1,4,41:1,20,80:X)
/*
//CTL4CNTL DD *
* Reformat File4 records to:
* |Key|blanks|blanks|blanks|F4Data|
1 21 41 61 80
OUTREC FIELDS=(1:1,4,61:1,20)
/*
|
The COMBINE output looks like this:
Code: |
KEY1 FILE1 RECORD01>KEY1 FILE2 RECORD01>KEY1 FILE3 RECORD01>KEY1 FILE4 RECORD01>
KEY2 FILE1 RECORD02>KEY2 FILE2 RECORD02>KEY2 FILE3 RECORD02>KEY2 FILE4 RECORD02>
KEY3 FILE1 RECORD03>KEY3 FILE2 RECORD03>KEY3 FILE3 RECORD03>KEY3 FILE4 RECORD03>
|
If you want a job more specific to your situation, tell me the RECFM and LRECL of each input file, and the position, length and format of the key.
For complete details on DFSORT's SPLICE operator, see:
http://www.storage.ibm.com/software/sort/mvs/uq90053/online/srtmutol.html#spl _________________ Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort |
|