2014-08-28 48 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