2014-08-28 71 views
-1

根据只有第一列值,我有两个文件。使用awk或python合并两个排序文件

文件1:

2.3 5 3 66 
5.5 2 3 54 
6.2 4 1 33 

文件2:

1.2 3 7 22 
4.5 2 6 77 
8.9 4 2 54 

我想这两个文件与最终的分类文件合并为

1.2 3 7 22 
2.3 5 3 66 
4.5 2 6 77 
5.5 2 3 54 
6.2 4 1 33 
8.9 4 2 54 
+2

为什么不简单'cat file1 file2 |排序' – goncalopp 2014-08-28 15:05:29

+0

@goncalopp我认为我们打算假设文件已排序,提交人希望避免排序合并后的输出。 – 2014-11-10 17:15:26

回答

4

如何使用sort -m(归并排序文件):

sort -m -n file1 file2 > file3 
+0

我不知道这是可能的排序!甜!谢谢!下面看看我的笨笨awk解决方案:)我应该清楚地阅读所有常见的UNIX工具的手册! – 2014-11-10 16:54:23

0

你的问题是一个很好的问题,但我认为它被投票了,因为你没有提供足够的细节。如果我可以假设文件已经由1列排序,你想要的最终输出由第1列进行排序,并有在列1中没有重复的值,那么这个解决方案的工作:

cat file1 \ 
| awk 'BEGIN{ 
cmd="cat file2"; cmd | getline line2; split(line2,a," "); key2=a[1]} { 
key1=$1; while(key2<key1) { 
    print line2; cmd | getline line2; split(line2,a," "); key2=a[1]}; 
print $0} END{ 
if(key2>key1) print line2}' 

你不不需要管cat文件1 awk,但我只是希望输入文件在命令的开头,而不是结尾。我经常因为这种多余的猫使用而受到批评。

你的问题被标记与Python,所以这里是一个Python3解决方案,以及,它利用heapq.merge()

import heapq 
with open('file1') as fd1, open('file2') as fd2: 
    for line in heapq.merge(fd1, fd2): 
     print(line, end='') 

我找到了答案,因为“在python合并排序的文件”搜索时。在其他页面中,这一个出现:heapq.merge() function to list of sorted files