2013-01-24 125 views
0

我有兩個文件。第一個(file1.txt)有大約15,000行,第二個文件(file2.txt)有大約180,000行。我試圖從file1.txt中找到所有匹配的行,並從file2.txt中刪除它們。我目前嘗試的是這樣的:grep -f文件搜索

grep -v -f file1.txt file2.txt > out.txt 

這是行得通的,但需要很長時間。我試圖找到一種方法來加快速度,但無法解決它。有沒有人有建議? 感謝您的幫助

+1

「匹配」你的意思在這裏是相同的嗎?不是正則表達式匹配? – Kent

+0

@Kent由於OP使用'grep',我想他想做正則表達式(或至少部分文本)匹配 – gaborsch

+0

檢查此:http://theunixshell.blogspot.com/2013/01/perls-equivalent-of- grep-f.html或http://theunixshell.blogspot.com/2012/12/file-comparisons-using-awk-match-columns.html – Vijay

回答

2

如果「匹配」的定義這裏是「一致」:

試試這個:

awk 'NR==FNR{a[$0];next;}!($0 in a)' file1 file2 >out.txt 
+0

太棒了!這完美並且幾乎是即時的。 awk可以做很多很酷的東西,我需要學習...謝謝 – user1352084

+0

@ user1352084,你可以嘗試你的grep行,但是-F選項,它看起來像'grep -F -v -f file1 fil2'看看它是否更快? – Kent

+0

@ user1352084因爲它解決了你的問題,請接受答案 – Suku