假设我有两个文本文件需要从中提取数据。两个文件的文本如下:
文件 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
选项不仅意味着"匹配这个固定字符串",还意味着"匹配任何这些换行符分隔的固定字符串"。
食谱:
join <(sed 's/^.*@//' file1|sort -u) <(sort -u file2)
它将输出文件1和文件2中所有域名的交集
请参阅 BashFAQ/036 了解此类问题的常用解决方案列表。
使用 VimDIFF 命令,这很好地展示了差异
如果我猜对了,您希望过滤文件 2 中提到的主机的所有地址。
然后你可以循环遍历File 2
和 grep 进行@<line>
,将结果累积到新文件或类似的东西中。
例:
cat file2 | sort -u | while read host; do grep "@$host" file1; done > filtered