2016-09-28 6 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 - к правой половине, что позволяет выполнять определения полей с использованием данных из файла1, file2. Без RIGHTSIDE вы снова собирали данные из файла1, а не из тех же позиций в файле2. У вас есть руководство? SyncSORT предоставит копии как часть вашей лицензии, поэтому нет причин не делать этого. –

Смежные вопросы