假设我有两个文本文件,我需要从中提取数据。这两个文件的文本如下:
文件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匹配的域名的结果?
提前谢谢!
答案 0 :(得分:8)
假设订单无关紧要,
grep -F -f FILE2 FILE1
应该做的伎俩。 (这是因为一个鲜为人知的事实:-F
的{{1}}选项并不仅仅意味着“匹配此固定字符串”,它意味着“匹配任何这些以换行符分隔的固定字符串”。 )
答案 1 :(得分:2)
食谱:
join <(sed 's/^.*@//' file1|sort -u) <(sort -u file2)
它将输出file1和file2
中所有域名的交集答案 2 :(得分:1)
有关此类问题的常见解决方案列表,请参阅BashFAQ/036。
答案 3 :(得分:1)
使用VimDIFF命令,这可以很好地呈现差异
答案 4 :(得分:0)
如果我说得对,你想用文件2中提到的主机过滤所有地址。
然后你可以循环遍历File 2
并grep @<line>
,将结果累积到新文件或类似内容中。
示例:
cat file2 | sort -u | while read host; do grep "@$host" file1; done > filtered