根據只有第一列值,我有兩個文件。使用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
根據只有第一列值,我有兩個文件。使用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
如何使用sort -m
(歸併排序文件):
sort -m -n file1 file2 > file3
我不知道這是可能的排序!甜!謝謝!下面看看我的笨笨awk解決方案:)我應該清楚地閱讀所有常見的UNIX工具的手冊! – 2014-11-10 16:54:23
你的問題是一個很好的問題,但我認爲它被投票了,因爲你沒有提供足夠的細節。如果我可以假設文件已經由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
爲什麼不簡單'cat file1 file2 |排序' – goncalopp 2014-08-28 15:05:29
@goncalopp我認爲我們打算假設文件已排序,提交人希望避免排序合併後的輸出。 – 2014-11-10 17:15:26