Sometimes it is useful to compare two files. To do this in awk, the trick is to load the data from the first file into an array.

Let's say for instance we have a list of first names in file1, one per line:


and in file2 with complete names:

John Smith
Mark Fo
Mary Bar

We want to find the names in file2 corresponding to the first name in file1. This can be done in a compact manner like this:

awk 'FNR==NR {arr[$0];next} $1 in arr' file1 file2

Some explanations:

Note: For this example, join(1) is a working alternative.