2014-10-27 40 views
0

我想在Unix中合并两个文件。我怎样才能做到这一点?如何合并unix中的两个文件

例如文件1包含:

host1:90:/users:user1 
host2:90:/users:user1 
host3:90:/users:user1 
host4:90:/users:user1 
host5:90:/users:user1 
host6:90:/users:user1 
host7:90:/users:user1 

文件2包含:

host1:owner_name 
host2:owner_name 
host3:owner_name 
host4:owner_name 
host5:owner_name 
host6:owner_name 
host7:owner_name 

输出结果:

host1:90:/users:user1:owner_name 
host2:90:/users:user1:owner_name 
host3:90:/users:user1:owner_name 
host4:90:/users:user1:owner_name 
host5:90:/users:user1:owner_name 
host6:90:/users:user1:owner_name 
host7:90:/users:user1:owner_name 

我已经使用这个命令paste -d ':' file1 file2 >merged_file,但是这是我得到:

host1:90:/users:user1:host1:owner_name 
host2:90:/users:user1:host2:owner_name 
host3:90:/users:user1:host3:owner_name 
host4:90:/users:user1:host4:owner_name 
host5:90:/users:user1:host5:owner_name 
host6:90:/users:user1:host6:owner_name 
host7:90:/users:user1:host7:owner_name 

回答

2

使用join代替:

% join -t':' file1 file2 
host1:90:/users:user1:owner_name 
host2:90:/users:user1:owner_name 
host3:90:/users:user1:owner_name 
host4:90:/users:user1:owner_name 
host5:90:/users:user1:owner_name 
host6:90:/users:user1:owner_name 
host7:90:/users:user1:owner_name 
+0

'join'工作,但想如果文件2是不是在排序顺序,然后提示错误。我们可以使用sed或awk – pratik 2014-10-27 09:15:19

+0

@pratik这可以通过在加入前在第一个字段周围进行排序来解决。真正的问题是:你是在试图将文件逐行合并还是试图在第一列中加入文件? – cnicutar 2014-10-27 09:15:58

+0

我也想合并第一栏的基础知识。 – pratik 2014-10-27 09:33:29