[英]How to remove both matching lines while removing duplicates
我有一个很大的文本文件,其中包含一个称为“ main”的电子邮件列表,并且已经向其中一些发送了邮件。 我有一个“已发送”电子邮件列表。 现在,我想从“主要”列表中删除“已发送”电子邮件。
换句话说,我想从文本文件中删除两个匹配的原始文件,同时删除重复项。 例:
我有:
email@email.com
test@test.com
email@email.com
我想要:
test@test.com
有没有更简单的方法来实现这一目标? 请建议执行此操作的工具或方法,但请考虑该文本文件大于10MB。
在终端:
cat test| sort | uniq -c | awk -F" " '{if($1==1) print $2}'
我用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
在命令行末尾将输出重定向到文本文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.