awk script to match and print

I need a script that will search for a string from column 1 in file A and when the string matches the last column in file B, print columns 1, 2 (file A) and columns 2, 3 (file B).

input

file A

stringtomatch1  a
stringtomatch2  a
stringtomatch3  b

file B

junkcolumn1 printcolumn2 printcolumn3 junkcolumn2 junkcolumn3 junkcolumn4 junkcolumn5 stringtomatch1
junkcolumn1 printcolumn2 printcolumn3 junkcolumn2 junkcolumn3 junkcolumn4 junkcolumn5 stringtomatch2
junkcolumn1 printcolumn2 printcolumn3 junkcolumn2 junkcolumn3 junkcolumn4 junkcolumn5 stringtomatch3

output

stringtomatch1 a printcolumn2 printcolumn3 
stringtomatch2 a printcolumn2 printcolumn3 
stringtomatch3 b printcolumn2 printcolumn3 

Hi,
Try :

awk 'NR == FNR {A[$1]=$2;next};$NF in A {print $NF,A[$NF],$2,$3}' fileA fileB

Regards.

1 Like

One could try something like:

while read MATCH VAR
do
   awk -v STR1=$MATCH OUT1=$VAR '{/STR1/}{print STR1" "OUT1" "$2" "$3}' fileB
done<fileA

hth

Thanks disedorgue. This seems to work for me

awk 'NR == FNR {A[$1]=$2;next};$NF in A {print $NF,A[$NF],$2,$3}' fileA fileB

If the files are sorted, an alternative is:

join -1 1 -2 8 -o 0,1.2,2.2,2.3 fileA fileB