Requete croisée entre plusieurs tableaux (comme dans une DB) - Shell/Batch - Programmation
Marsh Posté le 25-05-2013 à 12:32:18
La commande join fait ça très bien. Par exemple :
Code :
|
devrait te sortir ce qu'il te faut. Par contre il faut que les deux fichiers soient triés sur le premier champ.
Marsh Posté le 27-05-2013 à 17:04:58
Merci beaucoup.
Cependant, cela j'ai l'impression que cela fonctionne que lorsque chaque ligne du fichier 1 est au même emplacement que son équivalente dans le fichier 2.
Mon exemple était un peu trop "parfait" :
Dans mon cas, même si je trie par ordre numeric ou alphabetique les 2 fichiers, les lignes ne sont pas au même rangs car il y par exemple certaine ligne qui n'ont pas d'équivalences d'un coté ou de l'autre.
Par exemple on aurait d'un coté :
toto;bong@pouet.fr
titi;bing@pouet.fr
tata;bang@pouet.fr
tutu;bung@pouet.fr
et de l'autre :
titi;07348264
tata;9748372
tete;1625234
Dans ce cas là le résultat ne serait que :
bing@pouet.fr;07348264
bang@pouet.fr;9748372
Puisque que toto et tete ne sont présent que dans 1 des 2 listings....
Pire, certaine lignes peuvent également amener à plusieurs références comme par exemple :
Listing 1 :
ploplop;plop@pouet.fr
pliplip;plip@pouet.fr
plaplap;plap@pouet.fr
et
Listing 2:
ploplop;347622
pliplip;0457632
pliplip;8734623
plaplap;892839
Donnerait :
plop@pouet.fr;347622
plip@pouet.fr;0457632
plip@pouet.fr;8734623
plap@pouet.fr;892839
Comme un select en liant 2 tables via une clé et en interogant une valeur d'une table a partir de la valeur de la seconde.... sauf que ça serait en bash.....
Merci par avance en tout cas !
Marsh Posté le 27-05-2013 à 23:41:56
bugmax a écrit : |
Oui comme dit, il est impératif de faire un sort des fichiers avant le join. Mais l'absence d'un ligne dans l'un des fichiers ne pose pas de problème.
Je viens de tester et c'est exactement ce que j'obtiens avec avoir fait un sort sur les fichiers :
Code :
|
bugmax a écrit : |
pareil, chez moi ça ne pose aucune problème une fois le sort réalisé :
Code :
|
Pour info, ma version de join (celle par défaut sur ubuntu server LTS)
Citation : |
Marsh Posté le 29-05-2013 à 11:55:40
Et bien effectivement, cela fonctionne parfaitement.
Mon problème venait du sort que j'utilisais et qui me faisait sortir les lignes commencant par 1 (par ex) après celles commençant par 13, 1145, 10204....
De l'autre coté le join ne fonctionne pas avec un sort numerique.
En fait, le join prend un listing classé dictionnaire sur le premier caractere (1 puis 2 puis 3 ......) à l'interieur des lignes commencant par 1 (par ex) il faut que le tri soit numeric.
J'ai du ruser, mais avec ce tri, ton join fonctionne bien.
Merci à toi en tout cas !!
Marsh Posté le 25-05-2013 à 09:52:12
Bonjour,
J'ai un listing de valeurs à 2 dimensions :
Par exemple un tableau qui contiendrai #Nom;#Email :
toto;bing@pouet.fr
tata;bang@pouet.fr
tutu;bong@pouet.fr
....
J'ai un second listing de valeurs #Nom;#Numero
toto;04356374
tata;08988762
tutu;09089870
.....
Je vouvrai pouvoir en bash, générer automatique un troisieme tableau à partir des 2 premiers (#Email;#Numero)
bing@pouet.fr;04356374
bang@pouet.fr;08988762
bong@pouet.fr;09089870
.....
C'est un peu comme si l'on faisait des requetes croisées entre 2 table mysql via une clé commune aux 2 tables.... mais en bash.
Je sais qu'il me faut une boucle avec es tableaux associatif ainsi que la commande eval... mais je ne trouve pas de solution qui fonctionne....
Merci par avance pour votre aide !