Объединение файлов на основе общих полей

Я пытаюсь объединить три текстовых файла в похожих форматах на основе общих полей, сохраняя при этом необычные поля. Вот пример:

Файл1:

  X
A 1
B 3
C 2
D 1

Файл2:

  Y
A 3
C 2
E 3

Файл3:

  Z
A 2
E 1
D 1
F 3

Объединено:

  X Y Z
A 1 3 2
B 3 - -
C 2 2 -
D 1 - 1
E - 3 1
F - - 3

Это не обязательно должно быть -, где нет соответствующего значения. Команда соединения в этом вопросе https://unix.stackexchange.com/questions/43417/join-two-files-with-matching-columns работает хорошо, за исключением того, что не сохраняет необычные поля.

Спасибо.


person Novice    schedule 21.09.2015    source источник


Ответы (1)


join не может сделать то, о чем вы просите, но вот программа Python, которая делает:

#!/usr/bin/env python                                                                                                   

import sys

files = map(open, sys.argv[1:]) # list of input files

headers = map(file.readline, files) # list of strings
headers = map(str.strip, headers)

blanks = ['-'] * len(headers)
data = {} # { rowname : [datum...] }                                                                   

for ii, infile in enumerate(files): # read each file
        for line in infile:
                key, value = line.split()
                if key not in data:
                        data[key] = blanks[:] # deep copy
                data[key][ii] = value

print '\t', '\t'.join(headers)

for key, values in sorted(data.iteritems()):
        print key, '\t', '\t'.join(values)
person John Zwinck    schedule 21.09.2015
comment
Это сработало отлично! Именно то, что я хотел. Спасибо, бро. - person Novice; 21.09.2015