6

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

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

先感谢您!

4

5 回答 5

8

假设顺序无关紧要,

grep -F -f FILE2 FILE1

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

于 2012-10-13T02:23:54.663 回答
2

食谱:

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

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

于 2012-10-13T02:27:38.180 回答
1

请参阅BashFAQ/036以获取此类问题的常用解决方案列表。

于 2012-10-13T08:56:21.083 回答
1

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

于 2013-04-17T20:19:14.280 回答
0

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

然后,您可以循环File 2并 grep for @<line>,将结果累积到新文件或类似文件中。

例子:

cat file2 | sort -u | while read host; do grep "@$host" file1; done > filtered
于 2012-10-13T02:24:56.143 回答