Un script shell pour joindre deux files

Je veux écrire un shell script qui obtient deux files A et B , et get un résultat comme celui-ci:

Fichier A :

 user_a tel_a addr_a user_b tel_b addr_b 

Fichier B :

 process_1 user_a process_2 user_a process_3 user_b 

Et le résultat:

 user_a process_1 tel_a addr_a user_a process_2 tel_a addr_a user_b process_3 tel_b addr_b 

Comment puis-je faire ceci? awk ou quelque chose d'autre?

join

 join -1 2 -2 1 FileB FileA 

Sortie

 user_a process_1 tel_a addr_a user_a process_2 tel_a addr_a user_b process_3 tel_b addr_b 

Les files d'input doivent être sortingés par le champ key … Vos files d'exemple sont déjà sortingés, donc il n'y avait pas besoin, mais sinon vous pourriez incorporer le sorting comme suit.

 join -1 2 -2 1 <(sort -k2 FileB) <(sort FileA) 

Comme les join et paste ne sont pas disponibles partout (ils ne sont pas sur mon système basé sur BusyBox, par exemple), voici comment le faire avec awk, comme demandé:

 awk 'BEGIN { while( (getline < "fileA") > 0) A[$1]=$2 OFS $3 # read fileA into the array A close("fileA") } { print $2, $1, A[$2] }' fileB