Skip to content
Advertisement

Finding emails from one file in another

I want to find emails from one file listed as such:

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

in another file listed as so:

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

and output the lines from the second file that match with the first file also keeping in mind it needs to match the entire email from start to finish so it won’t match robertjohn@blogs.com accidently.

Desired output:

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

Thanks!

Advertisement

Answer

With grep, get the newline separated patterns (strings here, -F) from an input file with -f, and match with the other file:

grep -Ff email.txt file.txt 

With awk, keeping an array with emails as indexes and checking if the first field of each record in the second file is an index:

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

Example:

% 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
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement