【问题标题】:Removing duplicate emails through command line?通过命令行删除重复的电子邮件?
【发布时间】:2013-04-12 08:17:16
【问题描述】:

我在文本文件中有两个电子邮件列表:

emails.txt - 订阅我的时事通讯的人 blacklist.txt - 已退订的人

我现在正在更改时事通讯软件。显然,我不想给决定退订的人发电子邮件。有没有办法通过命令行检查 blacklist.txt 中列出的任何电子邮件当前是否在我的 emails.txt 文件中,以及是否要删除它们?

注意:所有电子邮件都在单独的行上。我知道如何使用sortuniq 删除重复项,但这仍然至少将其中一个留在文件中。我需要将 blacklist.txt 中包含的电子邮件从 emails.txt 中完全删除,并将清理后的电子邮件列表输出到 clean.txt

提前感谢您的帮助!

【问题讨论】:

    标签: shell command-line command


    【解决方案1】:

    grep -v(与 -F and -w)是一种方法。你还是可以试试comm..

    awk也可以做到:

    awk 'NR==FNR{a[$0]++;next}!a[$0]' black.txt email.txt
    

    【讨论】:

      【解决方案2】:

      您可以为此使用grep

      grep -vwF -f blacklist.txt emails.txt
      

      它只会显示emails.txt 中不在blacklist.txt 中的行。

      • grep -v 反转找到的结果。
      • grep -f 获取一个文件作为要比较的模式
      • grep -w 比较完整的单词
      • grep -F 完全匹配字符串

      【讨论】:

      • 好主意,但您可能需要-F-w 检查这两个电子邮件fedorqui.good@foo.comfedorqui_good@foo.com 没有-F-w 他们将相互匹配。
      • 嗯,听起来很有趣。我不知道-F 功能。更新答案,非常感谢@Kent!
      猜你喜欢
      • 2016-08-08
      • 1970-01-01
      • 2016-06-23
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多