我想合併兩個文件(其中一個是分隔空間,劃定的其他選項卡)只保留那些在兩個文件之間的匹配記錄:在Linux中:合併兩個非常大的文件
文件1:空格分隔
A B C D E F G H
s e id_234 4 t 5 7 9
r d id_45 6 h 3 9 10
f w id_56 2 y 7 3 0
s f id_67 2 y 10 3 0
文件2:製表符分隔
I L M N O P
s e 4 u id_67 88
d a 5 d id_33 67
g r 1 o id_45 89
我想匹配文件1場3( 「C」)與文件2字段5( 「O」),併合並這樣的文件:
文件3:製表符分隔
I L M N O P A B D E F G H
s e 4 u id_67 88 s f 2 y 10 3 0
g r 1 o id_45 89 r d 6 h 3 9 10
有文件1,不會出現在文件2,反之亦然條目,但我只想要保持路口(普通IDS)。
我真的不關心順序。
我寧願不使用加入,因爲這些都是非常大的未排序文件和連接需要通過前場常見的,這需要很長的時間和很大的內存來進行排序。
我曾嘗試使用awk,但沒有成功
awk > file3 'NR == FNR {
f2[$3] = $2; next
}
$5 in f2 {
print $0, f2[$2]
}' file2 file1
有人可以幫我嗎?
非常感謝您
非常感謝你。由於文件非常大,Python似乎過於緩慢:運行您編寫的腳本需要大約10分鐘的時間(無論如何都要感謝)。我想知道是否有更快的方法來做到這一點? Bash會一樣嗎? – user2337032
在嘗試其他Linux命令以後,在Python中這樣做的解決方案似乎是最好的。我現在纔開始瞭解Python,現在我有一個非常基本的問題:我得到我認爲合併的文件(我猜這是無關緊要的,如果一個是選項卡和其他空間分隔),但標題消失。有沒有辦法保留這兩個文件的頭文件?再次感謝你! – user2337032
如果您的標題是「I L M N O P A B D E F G H」,那麼只需在腳本的頂部添加:print「I L M N O P A B D E F G H」。關於如何加快速度...這完全是關於I/O子系統的最大化,目前的解決方案在這方面是非最優的,因爲它在每條讀取線處停止/啓動。 – tobe