我有如下要求。
- >我有2个输入文件FILE1和FILE2。
- >将匹配的记录写入FILE3。
- >将非匹配记录从FILE1写入FILE4。
- >将非匹配记录从FILE2写入FILE5。
输入文件中的键位置为(1,10)。
任何人都可以让我知道SORTCARD,我怎样才能在SyncSort中一步到位?
先谢谢, Rajasekhar Jannu。
答案 0 :(得分:2)
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个字节,因为您没有提及每个文件的长度。
还建议您搜索已知的大型机论坛并在此处发布,如果您没有获得有效的解决方案。希望这有帮助
参考: Joinkeys Guide
答案 1 :(得分:2)
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过滤时使用此填充字符