【问题标题】:How to compare two text files for the same exact text using BASH?如何使用 BASH 比较两个文本文件以获得相同的确切文本?
【发布时间】:2012-10-03 21:01:53
【问题描述】:

假设我有两个文本文件需要从中提取数据。两个文件的正文如下:

文件 1:

1name - randomemail@email.com
2Name - superrandomemail@email.com
3Name - 123random@email.com
4Name - random123@email.com

文件 2:

email.com
email.com
email.com
anotherwebsite.com

文件 2 是文件 1 的域名列表,从电子邮件地址中提取。 无论如何,这些都不是同一个域名,而且非常随机。

如何从文件1中得到匹配文件2的域名结果?

提前谢谢你!

【问题讨论】:

    标签: linux bash text grep compare


    【解决方案1】:

    使用 VimDIFF 命令,这可以很好地展示差异

    【讨论】:

    • 我发现它比grep -F -f FILE2 FILE1
    【解决方案2】:

    有关此类问题的常用解决方案列表,请参阅 BashFAQ/036

    【讨论】:

      【解决方案3】:

      配方:

      join <(sed 's/^.*@//' file1|sort -u) <(sort -u file2) 
      

      输出file1和file2中所有域名的交集

      【讨论】:

        【解决方案4】:

        如果我没听错,您想过滤文件 2 中提到的主机的所有地址。

        然后您可以循环遍历 File 2 并 grep 查找 @&lt;line&gt;,将结果累积到新文件或类似文件中。

        例子:

        cat file2 | sort -u | while read host; do grep "@$host" file1; done > filtered
        

        【讨论】:

        • 正确!但是使用文件 1 中使用的名称 - 电子邮件@地址格式。这可能看起来毫无意义,但它对我来说绝对有意义!
        • 这将为 file2 中的每一行读取 file1 的所有内容。它可能完成工作,但效率非常低。
        • @jordanm 同意。我完全赞成grep -f -F 解决方案。我试着概念化。
        【解决方案5】:

        假设顺序无关紧要,

        grep -F -f FILE2 FILE1
        

        应该可以解决问题。 (这是因为一个鲜为人知的事实:grep-F 选项不仅意味着“匹配这个固定字符串”,还意味着“匹配任何这些换行符分隔的固定字符串。”)

        【讨论】:

        • 你是救生员。谢谢!有什么方法可以让我们以相同的格式显示它,例如名称 - 电子邮件地址?
        • 它将打印 FILE1 中包含 FILE2 中任何字符串的整行。这不是你想要的格式吗?
        • 我的错!它现在工作正常!我的格式有问题。谢谢! :D
        猜你喜欢
        • 1970-01-01
        • 2011-05-09
        • 2022-10-18
        • 2011-08-25
        • 2021-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多