Linux连接不同长度的列文件

时间:2014-08-27 00:43:21

标签: text

我已经看到了很多类似的问题,但我没有找到答案。我有几个文本文件,每个文件有两列,但每个文件中的列长度不同,例如

file1:
type val
1    2
2    4
3    2

file2:
type val
1    9
2    8
3    9
4    7

I want:
type val type val
1    2   1    9
2    4   2    8
3    2   3    9
         4    7

'join'给出了类似的内容:

type val type val
1    2   1    9
2    4   2    8
3    2   3    9
     4   7

我可以写一个脚本,但我想知道是否有一个简单的命令。 谢谢,

1 个答案:

答案 0 :(得分:1)

好的,等不及答案了,所以写了一个python脚本。在这里它是对任何人都有用的。

import sys
import os
#joins all the tab delimited column files in a folder into one file with multiple columns
#usage joincolfiles.py /folder_with_files outputfile
folder = sys.argv[1] #working folder, put all the files to be joined in here
outfile=sys.argv[2] #output file
cols=int(sys.argv[3]) #number of columns, only works if each file has same number
g=open(outfile,'w')
a=[]
b=[]
c=0
for files in os.listdir(folder):
    f=open(folder+"/"+files,'r')
    b=[]
    c=c+1
    t=0
    for line in f:
        t=t+1
        if t==1:
            b.append(str(files)+line.rstrip('\n'))
        else:
            b.append(line.rstrip('\n')) #list of lines
    a.append(b) #list of list of lines
    f.close()
print "num files", len(a)       
x=[] 
for i in a:
    x.append(len(i))
maxl = max(x) #max length of files
print 'max len',maxl
for k in range(0,maxl): #row number
    for j in a:
        if k<len(j):
            g.write(j[k]+"\t")
        else:
            g.write("\t"*cols)
    g.write("\n")
g.close()