我正在尝试以基于公共字段的类似格式加入三个文本文件,同时保留不常见的字段。这是一个例子:
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命令运行良好,但它不保留不常见的字段。
谢谢。
答案 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)