Это случай для команды join
:
$ join File{1,2}.txt
aa c d 5
aa c d 7
aa c d 9
aa c e 5
aa c e 7
aa c e 9
Вывод не совсем то, что вы хотите, поэтому давайте исправим это:
$ join File{1,2}.txt | awk '{$1 = $1 FS $NF FS $1; $NF = ""; print}'
aa 5 aa c d
aa 7 aa c d
aa 9 aa c d
aa 5 aa c e
aa 7 aa c e
aa 9 aa c e
Еслитогда входные файлы не сортируются (при условии, что ваша оболочка bash / ksh / zsh)
join <(sort File1.txt) <(sort File2.txt)
См. 3.5.6 Замена процесса в руководстве по bash.