Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2264 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°553311
camarchepo​a
m'enfin !
Posté le 06-09-2004 à 11:35:23  profilanswer
 

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
mood
Publicité
Posté le 06-09-2004 à 11:35:23  profilanswer
 

n°553321
bobuse
Posté le 06-09-2004 à 11:51:52  profilanswer
 

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
n°553329
camarchepo​a
m'enfin !
Posté le 06-09-2004 à 12:01:49  profilanswer
 

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 !

n°553338
bobuse
Posté le 06-09-2004 à 12:24:06  profilanswer
 

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

n°553397
camarchepo​a
m'enfin !
Posté le 06-09-2004 à 14:25:53  profilanswer
 

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

n°553435
arsunik
ma tuxitude me beastifie
Posté le 06-09-2004 à 15:53:33  profilanswer
 

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

n°553509
camarchepo​a
m'enfin !
Posté le 06-09-2004 à 17:32:11  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs

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

 

Sujets relatifs
Concaténer des fichiers de logsPb de systeme de fichiers au demarrage
UNISON : synchronisation/sauvegarde de fichiers[réglé] Mandrake 10 : probleme Konqueror et gestion des fichiers
transferts de fichiers sécurisésFichiers .smd
Pb sur un script bashFichiers en lecteure seule sur le serveur !!
Gestion de fichiers sous linuxscript bash
Plus de sujets relatifs à : [bash] Comment faire une "jointure" entre deux fichiers ? awk ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR