Windows 删除其他文件中存在的文本行

Windows 删除其他文件中存在的文本行,windows,text,lines,duplicate-removal,Windows,Text,Lines,Duplicate Removal,我有两个文本文件,每个都有几百行。两个文件中都存在一些行,我想删除它们,以便它们只存在于其中一个文件中。基本上,我想减少它们以获得一组独特的线条。问题是我无法对它们进行分类(它们是我的铬历史的垃圾) 最简单的方法是什么? 我试过WinDiff,但结果不正确。我想我可以在一段时间内拼凑出一个PHP脚本,但我希望有一个更简单的方法(最好是命令行工具)。好吧,我最终还是写了一个PHP脚本 我将两个文件读入一个字符串,然后使用\r\n作为分隔符将字符串分解成数组。然后,我遍历数组以删除所有存在的元素,最

我有两个文本文件,每个都有几百行。两个文件中都存在一些行,我想删除它们,以便它们只存在于其中一个文件中。基本上,我想减少它们以获得一组独特的线条。问题是我无法对它们进行分类(它们是我的铬历史的垃圾)

最简单的方法是什么?


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

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

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

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

如果您有bash shell(cygwin),以下shell命令将从.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

comm-12如我所说,我无法排序,因为这样我就失去了访问URL的顺序,从而失去了所有上下文。如果我可以排序,那就很容易了。排序只是创建了一个中间的重复列表,然后用于从未排序的文件中筛选出重复项。如果要将两个文件合并为一个文件,也可以使用AWK工具:
AWK'!(a中的$0){a[$0];print}'a.txt b.txt