2016-09-28 70 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將提供副本作爲您的許可證的一部分,所以沒有理由不這樣做。 –