Extraire lignes dont le debut est identique

Résolu/Fermé
Raoul555 Messages postés 9 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 25 août 2011 - 18 mai 2007 à 14:58
Raoul555 Messages postés 9 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 25 août 2011 - 19 mai 2007 à 10:58
Bonjour,

J'ai deux gros fichiers de 20.000.000 lignes environ.

Dans le premier, j'ai un champs par ligne.
Dans le second, 2 champs.

Je souhaite obtenir les lignes de mon second fichier dont le champs 1 est présent dans mon premier fichier.

Vu le nombre important de lignes, je n'arrive pas à faire un script suffisament performant.

Avez-vous des idée?

Raoul555
A voir également:

7 réponses

Raoul555 Messages postés 9 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 25 août 2011 1
19 mai 2007 à 10:58
On m'a donné la solution. J'ai perdu beaucoup de temps avec cela, pourtant c'est tout simple :

join -j 1 -t \| Fichier1 Fichier2

Merci lami20j de ton aide.
1
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
18 mai 2007 à 16:05
Est-ce que dans le fichier 1 toutes les lignes sont différentes ou peut-il y avoir des lignes identiques ?
0
Raoul555 Messages postés 9 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 25 août 2011 1
18 mai 2007 à 16:10
Oui, toutes les lignes sont identiques dans les deux fichiers
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
18 mai 2007 à 16:18
Salut,

je n'ai pas testé
j'ai supposé que le délimitéur de champs et un espace
#!/usr/bin/perl
use strict;use warnings;

open LIRE,"fic2.txt"
         or die "E/S : $!\n";

while( my $l = <LIRE>){
    print if grep { /${\( (split " ",$l)[0] )}/ } `cat fic1.txt`;
}

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
18 mai 2007 à 16:32
Voici le test (j'ai crée 2 fichiers bidon 29 millions lignes et 40 millions lignes) - j'ai chronométré - 41 secondes
https://www.cjoint.com/?fsqEIjdcSG
0
Raoul555 Messages postés 9 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 25 août 2011 1
18 mai 2007 à 16:43
Je suis impressioné. Mais chez moi, cela ne marche pas. J'ai un message "Out of memory" avec 16Go de Ram!

Au fait, je ne connais pas trop le perl. Mon séparateur est le pipe. C'est bien cela alors?

#!/usr/bin/perl

open LIRE,"SneAndHrncFile.unl" or die "E/S : $!\n";

while( my $l = <LIRE>){
    print if grep { /${\( (split "|",$l)[0] )}/ } `cat EnabledVouchers.txt`;
}
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
18 mai 2007 à 16:48
J'ai un message "Out of memory" avec 16Go de Ram!
Moi je n'ai que 256 Mo sur mon pc?!

Bizarre!! Je vais voir à la maison (à vrai dire j'aurais aimer faire un test réel avec tes fichiers)
0