faire un join sur plusieurs champs à la fois?

faire un join sur plusieurs champs à la fois? - Shell/Batch - Programmation

Marsh Posté le 31-10-2006 à 18:47:33    

Bonjour!
 
Je cherche désespérément à faire un join de 2 fichiers, dont les 2 premiers champs doivent être identiques.
 
J'ai essayé des commandes du style:
join -j 1 -j 2 fichier1 fichier2
 
mais ça ne marche pas, j'ai l'impression que la 2e condition est tout bonnement ignorée...
 
Est-il possible de faire un join sur plusieurs champs à la fois?
 
Mon but est de "filtrer" le fichier1 avec le fichier2 (qui ne contient que les 2 colonnes servant de filtre), et ne récupérer que les lignes dont les 2 premières colonnes figurent dans une ligne du fichier2. Quelqu'un aurait-il éventuellement une autre piste à me proposer? (sachant que j'ai des contraintes de performance...)
 
Merci d'avance!

Reply

Marsh Posté le 31-10-2006 à 18:47:33   

Reply

Marsh Posté le 31-10-2006 à 19:27:53    

Déjà c'est pour quel environement ?

Reply

Marsh Posté le 01-11-2006 à 10:05:16    

Pardon, c'est sous HP-Unix en ksh.

Reply

Marsh Posté le 01-11-2006 à 21:50:14    

join ne peut faire la jointure que sur un seul champ.
 
Voici une solution simple utilisant awk (les fichiers n'on pas besoin d'être triés sur les champs de jointure) :

awk '
     NR==FNR { filtre[$1,$2]=1 ; next }
     filtre[$1,$2]
    ' fichier2 fichier1



---------------
Jean Pierre.
Reply

Marsh Posté le 02-11-2006 à 11:38:08    

Ca marche! Et avec des performances extra en prime!
 
Merci beaucoup!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed