2011-02-27 57 views
0

我有兩個文本文件,每個文本文件有幾百行。其中一些行存在於兩個文件中,我想刪除這些行以使它們僅存在於其中一個文件中。基本上,我想減少它們以獲得一組獨特的線條。問題在於我無法對它們進行排序(它們是我的Chromium歷史的精簡版)。刪除存在於另一個文件中的文本行

最簡單的方法是什麼?

我試過WinDiff,但那給了不正確的結果。我認爲我可以在一段時間內敲一個PHP腳本,但希望有一個更簡單的方法(最好是命令行工具)。

回答

0

那麼,我最終寫了一個PHP腳本。

我將兩個文件讀入一個字符串,然後使用\r\n作爲分隔符將字符串分解爲數組。然後,我遍歷數組以刪除存在的所有元素,最後將它們轉儲迴文件。

唯一的問題是,通過嘗試將剝離例程重構爲函數,我發現通過引用傳遞被更改(元素刪除)的數組導致它減慢到需要按Ctrl-C 'd,所以我只是通過價值傳遞並返回新的數組(違反直覺)。另外,使用unsetdelete the elements無論如何都很慢,所以我只是將元素設置爲空字符串,並在轉儲過程中跳過了這些元素。

0

如果你有一個bash shell中(Cygwin的),下面的shell命令將刪除出現在這兩個文件從a.txt中的所有行:

comm -12 <(sort a.txt|uniq) <(sort b.txt|uniq) | while read dupe; do dupe_escaped=$(echo "$dupe" | sed 's/[][\.*^$/]/\\&/g'); sed -e "/${dupe_escaped}/d" -i a.txt; done 
+0

就像我說的,我不能排序,因爲那時我失去訪問URL的順序,從而失去了所有的上下文。如果我可以排序,這將是**真的很容易。 – Synetech 2011-02-27 23:20:11

+0

排序只是創建一個重複的中間列表,然後用於從未排序的文件中過濾出重複項。 – codecraft 2011-02-27 23:23:31

+0

如果你想將兩個文件合併成一個文件,你也可以使用AWK工具:'awk'!(a $){a [$ 0]; print}'a.txt b.txt' – codecraft 2011-02-27 23:29:23

相關問題