Não é possível usar o grep, mas é possível usar o awk:
$ awk 'NR==1 {print $0;next} # Print header
NR==FNR {a[$1]=$2;next} # collect data from file1.txt
{ if($5 in a) # If column L match
{ print($5,a[$5],$1,$7) } # print columns (H and N)
}
' file1.txt file2.txt
Como um verso:
$ awk 'NR==1{print $0;next} NR==FNR{a[$1]=$2;next} {if($5 in a){print($5,a[$5],$1,$7)}}' file1.txt file2.txt
A B C D
5 8 4 8
4 9 7 7
A ordem é quando os campos aparecem no file2.txt
.
Se você precisar classificá-lo, adicione uma etapa de classificação.