我想从一个列出的文件中找到电子邮件:
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
谢谢!
答案 0 :(得分:2)
使用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