Exercice de jointure sous UNIX la commande join


Soient tele un fichier qui contient le répertoire téléphonique suivant :

Boileau 024867-6235
Derrick 024867-1842
Ernest 024867-1234
Grand 024867-2240
Herbrant 024867-0256
Jonathan 024867-7358
Louis 024867-3237
Tardif 024867-5341
Wagner 024867-1234

Et noms la liste suivante des noms et départements correspondants :

Ernest Dept. 389
Frolo Dept. 217
Grand Dept. 311
Tardif Dept. 454
Wagner Dept. 520

Construire un fichier NTD (nom, téléphone, département) où chaque ligne est un nom suivi du numéro de téléphone puis du numéro de département. Comment faire pour avoir tous les noms dans le fichier NTD ? Comment obtenir un fichier DNT où chaque ligne est composée (dans cet ordre) du numéro de département, du nom et du numéro de téléphone ? Soit numeros le fichier des numéros de téléphones :

024867-0256
024867-1234
024867-5555
024867-7358

Sélectionner du fichier tele les lignes où figurent les numéros du fichier ci-dessus.

join tele noms > NDT

Pour avoir toutes les lignes des deux fichiers en sorties (même celles qui ne font pas partie de la jointure) :

join -a1 -a2 tele noms > NDTjoin -a1 -a2 -o 2.3,0,1.2 tele noms > DNT

-o 2.3,0,1.2 pour avoir en sortie le champ 3 du deuxième fichier (2.3), le champ jointure en ne prenant que l'union (0) et le champ 2 du premier fichier.


Enfin, pour joindre le fichier tele et le fichiers numeros, il faut d'abord trier tele selon le champ de jointure (ici les numéros de tétéphone) :

sort -k 2 tele | join -1 2 -2 1 - numeros

La jointure est faite sur le champ 2 du premier fichier (-1 2) et le champ 1 du deuxième fichier (-2 1). Le symbole - représente la sortie du sort.

Article publié le 29 Août 2010 Mise à jour le Mardi, 10 Août 2021 21:31 par GC Team