删除另一个文件中存在的文本行

时间:2011-02-27 21:28:56

标签: windows text lines duplicate-removal

我有两个文本文件,每个文件有几百行。两个文件中都存在一些行,我想删除它们,使它们只存在于其中一个文件中。基本上,我想减少它们以获得一组独特的线条。问题是我无法对它们进行排序(它们是我Chromium历史的精简版)。

最简单的方法是什么?

我尝试过WinDiff,但结果不正确。我想我可以在一段时间内拼凑一个PHP脚本,但我希望有一种更简单的方法(最好是一个命令行工具)。

2 个答案:

答案 0 :(得分:0)

好吧,毕竟我最终写了一个PHP脚本。

我将两个文件都读成字符串,然后使用\r\n作为分隔符将字符串分解为数组。然后我遍历数组以删除任何存在的元素,最后将它们转储回文件。

唯一的问题是,通过尝试将剥离例程重构为函数,我发现通过引用传递被更改的元素(元素已移除)导致它减慢到需要为Ctrl-C'的程度d,所以我只是通过值传递并返回新数组(违反直觉)。另外,无论如何使用unsetdelete the elements都很慢,所以我只是将元素设置为空字符串并在转储期间跳过它们。

答案 1 :(得分: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