2016-09-28 86 views
0

我想加入两个文件基于一个关键,并根据条件在结果中添加一个新的列,但我无法弄清楚为什么我的条件在命令不起作用。请帮我理解正确的做法。Syncsort加入两个文件

A.TXT

3~Y 
4~0 
1~Y 
2~N 

b.txt

4~44~444 
3~33~333 
2~22~222 
1~11~111 

Syncsort的命令

/INFILE a.txt ALIAS DOC '~' 3000 
/JOINKEYS BA1 
/FIELD DOC_Rest1 2:1 - 2: 
/INFILE b.txt ALIAS FINACT '~' 3000 
/JOINKEYS BA2 
/FIELD FINACT_DID 2:1 - 2: 
/FIELD FINACT_PILOT 3:1 - 3: 
/FIELDS BA1 1:1 - 1:, BA2 1:1 - 1: 
/COND CHKINCCALS (DOC_Rest1 = 'Y') 
/DERIVEDFIELD endofrecord '\n' 
/DERIVEDFIELD TYPECAL 
     If CHKINCCALS then FINACT_DID 
     Else FINACT_PILOT 
/OUTFILE c.txt OVERWRITE /REFORMAT LEFTSIDE:BA1,LEFTSIDE:DOC_Rest1, TYPECAL, endofrecord 
/END 

预期结果

1~Y~11~ 
2~N~222~ 
3~Y~33~ 
4~0~222~ 

实际结果

1~Y~Y~ 
2~N~~ 
3~Y~Y~ 
4~0~~ 

回答

0

经过一番猜测的工作,我能找出正确的方法。我仍然不确定它是如何工作的。

/INFILE a.txt ALIAS DOC '~' 3000 
/JOINKEYS BA1 
/FIELD DOC_Rest1 2:1 - 2: 
/INFILE b.txt ALIAS FINACT '~' 3000 
/JOINKEYS BA2 
/FIELD FINACT_DID 2:1 - 2: 
/FIELD FINACT_PILOT 3:1 - 3: 
/FIELDS BA1 1:1 - 1:, BA2 1:1 - 1: 
/COND CHKINCCALS (DOC_Rest1 = 'Y') 
/DERIVEDFIELD endofrecord '\n' 
/DERIVEDFIELD TYPECAL 
     If CHKINCCALS then RIGHTSIDE:FINACT_DID 
     Else RIGHTSIDE:FINACT_PILOT 
/OUTFILE c.txt OVERWRITE /REFORMAT LEFTSIDE:BA1,LEFTSIDE:DOC_Rest1, TYPECAL, endofrecord 
/END 
+0

好的,谢谢。所以看起来LEFTSIDE指的是你的左半部分加入的记录,RIGHTSIDE指向右半部分,它允许你使用file1,file2中的数据创建你的字段定义。如果没有RIGHTSIDE,您将从file1再次获取数据,而不是从file2上的相同位置获取数据。你有手册吗? SyncSORT将提供副本作为您的许可证的一部分,所以没有理由不这样做。 –