0

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

最简单的方法是什么?

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

4

2 回答 2

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
于 2011-02-27T23:17:32.213 回答
0

好吧,我最终还是写了一个 PHP 脚本。

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

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

于 2011-02-27T22:52:58.393 回答