Extraire lignes dont le debut est identique
Résolu
Raoul555
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
Raoul555 Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Raoul555 Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Extraire lignes dont le debut est identique
- Extraire une video youtube - Guide
- Extraire le son d'une vidéo - Guide
- Extraire image pdf - Guide
- Extraire texte d'une image - Guide
- Extraire fichier rar - Guide
7 réponses
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.
join -j 1 -t \| Fichier1 Fichier2
Merci lami20j de ton aide.
Est-ce que dans le fichier 1 toutes les lignes sont différentes ou peut-il y avoir des lignes identiques ?
Salut,
je n'ai pas testé
j'ai supposé que le délimitéur de champs et un espace
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`; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
https://www.cjoint.com/?fsqEIjdcSG
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?
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`; }