2015-10-26 5 views
-1

Мне нужно объединить два файла в один. Предположим, у меня есть 2 входных файла FILE1 и FILE2. И мне нужно не совпадающие записи из FILE1 и FILE2 в FILE 3, а также я хочу написать соответствующие записи также в FILE3.Если есть соответствие на основе ключа в FILE1 и FILE2, то подходящую запись, которую нужно записать, нужно выбрать из FILE1/FILE2 на основе некоторого условия.Сравните два файла и включите как совпадающие, так и несоответствующие записи

Ключевое положение в обоих входных файлах одинаково.

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

+2

Возможный дубликат [Сравнить два файла и записать его на «матч» и файлы «NoMatch»] (http://stackoverflow.com/questions/792432/ сравнить два-фил es-and-write-it-to-match-and-nomatch-files) –

+0

Спасибо, Билл. Моя проблема была не совсем такой же, как вы упомянули в ссылке, но помогли мне достичь решения. – bp89

ответ

0

я получил мое решение с помощью следующей сортировки карты:

JOINKEYS F1=IN1,FIELDS=(1,7,A,13,7,A)      
    JOINKEYS F2=IN2,FIELDS=(1,7,A,13,7,A)      
    JOIN UNPAIRED,F1,F2          
    REFORMAT FIELDS=(F1:1,239,F2:1,239,?)      
    OPTION COPY            
    OUTFIL FNAMES=OUT1,INCLUDE=(479,1,SS,EQ,C'1,2'),   
    IFTHEN=(WHEN=(479,1,CH,EQ,C'1'),      
      BUILD=(1,239,479,1)),      
    IFTHEN=(WHEN=NONE,         
      BUILD=(240,239,479,1))      
    OUTFIL FNAMES=OUT2,INCLUDE=(479,1,SS,EQ,C'B'),    
    IFTHEN=(WHEN=(111,1,FS,EQ,NUM,AND,175,1,FS,EQ,NUM), 
      BUILD=(1,239)),        
    IFTHEN=(WHEN=(350,1,FS,EQ,NUM,AND,414,1,FS,EQ,NUM), 
      BUILD=(240,239)),       
    IFTHEN=(WHEN=NONE,         
      BUILD=(1,239))        
+0

Для OUT2 вы можете использовать CH вместо SS, затем на OUT1 используйте SAVE вместо INCLUDE. В OUT2 вы можете использовать IFOUTLEN = 239, а во втором IFTHEN объединяться с отрицательным значением первого IFTHEN, а затем удалить первый и третий IFTHEN. –

+0

Названия почти дословно одинаковы. Это верхняя часть результатов поисковой системы при использовании ваших ключевых слов. –

+0

@BillWoodger, я согласен, что название почти похоже на это. Вы можете объяснить, как я могу удалить первый и третий, если использовать IFOUTLEN = 239. Я проверил руководство DFSORT, IFOUTLEN переопределяет OUTREC LRECL для IFTHEN.I думаю, что я уже даю длину записей в BUILD, я думаю. – bp89

0

Попробуйте использовать присоединиться ключами

SORT FIELDS=COPY 
JOINKEYS FILES=F1,FIELDS=(1,5,A) 
JOINKEYS FILES=F2,FIELDS=(1,5,A) 
JOIN UNPAIRED,F1,F2 
REFORMAT FIELDS=(F1:1,6,F2:1,80) 

в переформатировать поля, можно отметить поля, как вы хотите, то есть, если вы хотите, соответствующие записи, чтобы быть выбраны из file2 затем упомянуть ту fileds рядом F2:.

+0

И как вы скажете, что на F1 или несоответствие на F2 было совпадение, или несоответствие F2? –