Linux 如何使用BASH比较相同文本的两个文本文件?

Linux 如何使用BASH比较相同文本的两个文本文件?,linux,bash,text,grep,compare,Linux,Bash,Text,Grep,Compare,假设我有两个文本文件需要从中提取数据。两份文件的文本如下: 文件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:

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匹配的域名的结果


提前谢谢你

假设顺序无关紧要

grep -F -f FILE2 FILE1

我们应该做到这一点。(这是因为一个鲜为人知的事实:grep的
-F
选项不仅仅意味着“匹配此固定字符串”,它还意味着“匹配这些新行分隔的固定字符串中的任何一个。”)

如果我没搞错,您希望筛选文件2中提到的主机的所有地址

然后,您可以循环查看
文件2
和grep for
@
,将结果累积到新文件或类似文件中

例如:

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

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

join有关此类问题的常用解决方案列表,请参见。

使用VimDIFF命令,这可以很好地说明不同之处

您是一个救生员。非常感谢。是否有任何方法可以让它以相同的格式显示,例如名称-电子邮件地址?它将打印文件1中包含文件2中任何字符串的整行。这不是你想要的格式吗?我错了!现在很好用!我的格式有问题。谢谢纠正!但名字是——Email@ddress文件1中使用的格式。这似乎毫无意义,但对我来说绝对有意义!这将读取文件2中每一行的所有文件1。“它可能完成工作,但效率很低。”乔丹同意。我完全支持
grep-f-f
解决方案。我试图做到概念化。我发现它比grep-F-F FILE2 FILE1要好