我有两个文本文件,每个文件有几百行。两个文件中都存在一些行,我想删除它们,使它们只存在于其中一个文件中。基本上,我想减少它们以获得一组独特的线条。问题是我无法对它们进行排序(它们是我Chromium历史的精简版)。
最简单的方法是什么?
我尝试过WinDiff,但结果不正确。我想我可以在一段时间内拼凑一个PHP脚本,但我希望有一种更简单的方法(最好是一个命令行工具)。
答案 0 :(得分:0)
好吧,毕竟我最终写了一个PHP脚本。
我将两个文件都读成字符串,然后使用\r\n
作为分隔符将字符串分解为数组。然后我遍历数组以删除任何存在的元素,最后将它们转储回文件。
唯一的问题是,通过尝试将剥离例程重构为函数,我发现通过引用传递被更改的元素(元素已移除)导致它减慢到需要为Ctrl-C'的程度d,所以我只是通过值传递并返回新数组(违反直觉)。另外,无论如何使用unset
到delete 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