【问题标题】:Finding emails from one file in another从另一个文件中的一个文件中查找电子邮件
【发布时间】:2017-03-02 02:37:08
【问题描述】:

我想从一个列出的文件中查找电子邮件:

john@blogs.com
joe@blogs.com
james@blogs.com

在另一个这样列出的文件中:

john@blogs.com:+123456789
jack@blogs.com:+123456789
jeff@blogs.com:+123456789
james@blogs.com:+123456789

并从第二个文件中输出与第一个文件匹配的行,同时记住它需要从头到尾匹配整个电子邮件,这样它就不会意外匹配 robertjohn@blogs.com。

期望的输出:

john@blogs.com:+123456789
james@blogs.com:+123456789

谢谢!

【问题讨论】:

    标签: regex linux bash awk grep


    【解决方案1】:

    使用grep,从带有-f 的输入文件中获取换行符分隔模式(此处为字符串,-F),并与另一个文件匹配:

    grep -Ff email.txt file.txt 
    

    使用awk,保留一个以电子邮件为索引的数组,并检查第二个文件中每条记录的第一个字段是否为索引:

    awk -F: 'NR==FNR{a[$0]=1; next} a[$1]' email.txt file.txt
    

    示例:

    % cat email.txt 
    john@blogs.com
    joe@blogs.com
    james@blogs.com
    
    % cat file.txt
    john@blogs.com:+123456789
    jack@blogs.com:+123456789
    jeff@blogs.com:+123456789
    james@blogs.com:+123456789
    
    % grep -Ff email.txt file.txt 
    john@blogs.com:+123456789
    james@blogs.com:+123456789
    
    
    % cat email.txt                                                  
    john@blogs.com
    joe@blogs.com
    james@blogs.com
    
    % cat file.txt
    john@blogs.com:+123456789
    jack@blogs.com:+123456789
    jeff@blogs.com:+123456789
    james@blogs.com:+123456789
    
    % awk -F: 'NR==FNR{a[$0]=1; next} a[$1]' email.txt file.txt
    john@blogs.com:+123456789
    james@blogs.com:+123456789
    

    【讨论】:

    • 非常感谢。你是最棒的:)
    • @DavidHasselhofthe2nd 注意:grep 命令将匹配“robertjohn@blogs.com:...”; awk 效果很好。
    • @linuxfan 是的,我的 awk 版本有内存问题,我只是使用 grep 来减小大小,然后运行 ​​awk 来改进它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多