[bash] Comment faire une "jointure" entre deux fichiers ? awk ?

Comment faire une "jointure" entre deux fichiers ? awk ? [bash] - Linux et OS Alternatifs

Marsh Posté le 06-09-2004 à 11:35:23    

Bonjour !
 
je voudrai faire une sorte de jointure entre deux fichier par rapport à un id de personne
 
exemple : fichier personne.fic

Code :
  1. 1    toto
  2. 2    titi
  3. 3    tata
  4. 4    tutu


 
 
fichier nom.fic

Code :
  1. 1   leNomDeToto
  2. 2   leNomDeTiti    truc
  3. 3   leNomDeTata    machin
  4. 4   leNomDeTutu    bidule


 
 
j'ai commencé et ca donne ca mais bof bof :
 

Code :
  1. i=0;
  2. while [ $i -le 221 ]   #il y a 221 lignes dans personne.fic
  3. do
  4.         awk '{ if ($1==i) print $2 }' nom.fic >> sortie;
  5.         echo $i;
  6.         i=`expr $i + 1`
  7. done


 
Mais forcément ca marche pas  :pt1cable:  
mais je suis pas top en shell  :(
 
le but c'est d'avoir :
1    toto    leNomDeToto
2    titi    leNomDeTiti
3    tata    leNomDeTata
:
:
:
 
Merci de votre aide !!!


Message édité par camarchepoa le 06-09-2004 à 11:37:12
Reply

Marsh Posté le 06-09-2004 à 11:35:23   

Reply

Marsh Posté le 06-09-2004 à 11:51:52    

une solution simple, si tu es sur de ne pas avoir de "trou" dans les deux fichiers, genre tu passes pas de n à n+3 sans les id intermédiaires. Il suffit de réordonner les deux fichiers, et tu as les coresspondances :)
 
EDIT : en fait, je manque de détail sur les specs de tes fichiers :/


Message édité par bobuse le 06-09-2004 à 11:52:14
Reply

Marsh Posté le 06-09-2004 à 12:01:49    

en fait il risque d'y avoir des trous :(
 
les champs sont séparés par des tabulations ...
 
tu veut savoir autre chose ?
 
déjà merci !

Reply

Marsh Posté le 06-09-2004 à 12:24:06    

ben est-ce que à chaque id dans personne.fic, il y a un id correspondant dans nom.fic (et vise-versa) ?

Reply

Marsh Posté le 06-09-2004 à 14:25:53    

alors :
 
- chaque id de nom.fic est dans personne.fic
 
- l'inverse est FAUX
 
--> en fait c'est possible de connaitre le nom seul

Reply

Marsh Posté le 06-09-2004 à 15:53:33    

Une solution avec awk :
 
awk '
BEGIN {
while (getline < "personne.fic" ) {
  id[$1] = $2 " "
}
}
{ print $1 " " id[$1] $2 }
' nom.fic

Reply

Marsh Posté le 06-09-2004 à 17:32:11    

finalement j'ai chargé les fichiers dans une table temporaire, fait une requête sql et déchargé dans un fichier ...
 
 
C'est bourin mais ca marche ...
 
Faudrai que je teste la solution d'ArSuniK mais la condition du while me parrait étrange non ?
 
En tout cas merci pour vos réponses !!!


Message édité par camarchepoa le 06-09-2004 à 17:32:29
Reply

Sujets relatifs:

Leave a Replay

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