基于公共字段合并文件

时间:2015-09-21 01:18:55

标签: join tsv

我正在尝试以基于公共字段的类似格式加入三个文本文件,同时保留不常见的字段。这是一个例子:

File1中:

  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中的join命令运行良好,但它不保留不常见的字段。

谢谢。

1 个答案:

答案 0 :(得分:0)

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)