2014-09-20 98 views
1

我有一个大的文本文件,其中包含名为“主要”的电子邮件列表,我已经发送邮件给其中的一些。我有一个'发送'的电子邮件列表。现在,我想从“main”列表中删除“已发送”的电子邮件。如何删除两个匹配的行,同时删除重复

换句话说,我想删除文本文件中的匹配原始数据,同时删除重复项。例如:

我:

[email protected] 
[email protected] 
[email protected] 

我想:

[email protected] 

有没有更简单的方式来实现这一目标?请建议一个工具或方法来做到这一点,但请考虑文本文件大于10MB。

+0

记事本++是否支持正则表达式/脚本? – sln 2014-09-20 22:56:55

+0

@sln是的。 – Cullub 2014-09-20 22:57:35

+0

您可以使用power shells比较对象cmdlet http://technet.microsoft.com/en-us/library/ee156812.aspx – 2014-09-20 23:12:21

回答

0

在终端:

cat test| sort | uniq -c | awk -F" " '{if($1==1) print $2}' 
+4

你能否详细解释一下你的答案? – Miki 2014-09-20 23:16:33

+1

你能解释一下吗? – leopard121 2014-09-24 11:44:30

0

我使用cygwin很多关于这样的任务,如UNIX命令行是极其强大的。

下面是如何实现你想要的:

cat main.txt | sort -u | grep -Fvxf sent.txt 

sort -u将删除重复(,首先分拣main.txt文件),并grep将采取去除不受欢迎的地址的照顾。

下面介绍一下grep选项的含义:

  • -F纯文本搜索
  • -v反转导致
  • -x将迫使整个行
  • -f读模式从指定的文件匹配的模式

哦,如果你的文件在Windows格式(CR LF新行),你宁愿这样做:

cat main.txt | dos2unix | sort -u | grep -Fvxf <(cat sent.txt | dos2unix) 

就像使用Windows命令行,你可以简单地添加:

> output.txt 

在命令行结束时将输出重定向到文本文件。

+0

非常感谢。但有没有办法在Notepad ++或任何其他类似的基于Windows的软件中执行此操作。 – leopard121 2014-09-24 11:44:00

+0

这太需要一个文本编辑器来处理,但cygwin是针对windows的。 – 2014-09-24 11:52:44