Как получить совпадающие и несовпадающие записи из двух входных файлов за один шаг, используя SYNCSORT? - PullRequest
1 голос
/ 05 октября 2011

У меня есть требование, как показано ниже.

-> У меня есть 2 входных файла FILE1 и FILE2.

-> Записать соответствующие записи в ФАЙЛ3.

-> Записать несоответствующие записи из FILE1 в FILE4.

-> Записать несоответствующие записи из FILE2 в FILE5.

Позиция ключа в обоих входных файлах (1,10).

Может кто-нибудь, пожалуйста, дайте мне знать SORTCARD, как я могу получить это за один шаг в SyncSort ??

Заранее спасибо, Раджасехар Джанну.

Ответы [ 2 ]

2 голосов
/ 15 октября 2013
enter code here
//JOIN EXEC PGM=SORT 
//SORTJNF1 DD * 
1234567890 FILEB 
1234678901 FILE1 
/* 
//SORTJNF2 DD * 
1234567890 FILEB 
1234789012 FILE2 
/* 
//JNF1CNTL DD DUMMY             <=== not necessary(informatory)
//JNF2CNTL DD DUMMY             <=== not necessary(informatory)
//BOTH     DD DSN=<FILENAME>
//FILE1 DD DSN=<file name> 
//FILE2 DD DSN=<file name>
//SYSOUT DD SYSOUT=* 
//SYSPRINT DD SYSOUT=* 
//SORTOUT DD SYSOUT=*           <=== we can see the JOIN output here(explanatory)
//SYSIN DD * 
 JOINKEYS FILE=F1,FIELDS=(1,10,A) 
 JOINKEYS FILE=F2,FIELDS=(1,10,A) 
 JOIN UNPAIRED,F1,F2 
 REFORMAT FIELDS=(F1:1,16,F2:1,16),FILL=C'@' 
 OPTION COPY 
 OUTFIL FNAMES=BOTH, 
 INCLUDE=(01,01,CH,NE,C'@',AND,17,01,CH,NE,C'@'),BUILD=(1,16)
 OUTFIL FNAMES=FILE1,
 INCLUDE=(01,01,CH,NE,C'@',AND,17,01,CH,EQ,C'@'),BUILD=(1,16)
 OUTFIL FNAMES=FILE2,
 INCLUDE=(01,01,CH,EQ,C'@',AND,17,01,CH,NE,C'@'),BUILD=(17,16)
 /*  

 //***** this REFORMAT output would be something like
 1234567890 FILEB1234567890 FILEB 
 1234678901 FILE1@@@@@@@@@@@@@@@@
 @@@@@@@@@@@@@@@@1234789012 FILE2  
 //*********************************

FILL = C '@' вставляет символ '@' в запись, созданную операцией JOIN, так что этот заполненный символ может быть использован позже во время использования фильтра INCLUDE

2 голосов
/ 07 октября 2011
JOINKEYS FILE=F1,FIELDS=(01,10,A)
JOINKEYS FILE=F2,FIELDS=(01,10,A)
UNPAIRED F1,F2   <== This results in cartesian product
REFORM FIELDS=(F1:01,10,F2:01,10),FILL=C'$'
SORT FIELDS=(01,10,CH,A)
OUTFIL FNAMES=03,
INCLUDE=(01,01,CH,NE,C'$',AND,11,01,CH,NE,C'$')  <== Matched Records
OUTFIL FNAMES=04,
INCLUDE=(01,01,CH,NE,C'$',AND,11,01,CH,EQ,C'$')  <== Non-Matched Records from File1
OUTFIL FNAMES=03,
INCLUDE=(01,01,CH,EQ,C'$',AND,11,01,CH,NE,C'$')  <== Non-Matched Records from File2

Кроме того, обратите внимание, что в обоих файлах были рассмотрены только 10 байт, поскольку вы не указали длины каждого файла.

Также предлагаем вам поискать на известных форумах по мэйнфреймам и опубликовать их здесь, если вы этого не сделаете.получить рабочий раствор.Надеюсь, это поможет

...