如何在删除重复项时删除两个匹配的行

时间:2014-09-20 22:47:01

标签: regex csv text editor notepad++

我有一个大文本文件,其中包含一个名为" main"的电子邮件列表,我已经向其中一些邮件发送了邮件。我有一个'发送'电子邮件。现在,我想删除发送的'列表中的电子邮件" main"。

换句话说,我想删除重复项时从文本文件中删除匹配的raw。例如:

我有:

email@email.com
test@test.com
email@email.com

我想:

test@test.com

有没有更简单的方法来实现这一目标?请提供一个工具或方法来执行此操作,但请考虑文本文件大于10MB。

2 个答案:

答案 0 :(得分:0)

在终端:

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

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

在命令行的末尾,将输出重定向到文本文件。