Extraire lignes dont le debut est identique

Résolu
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

7 réponses

  1. 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
    1. Contributeur
      Est-ce que dans le fichier 1 toutes les lignes sont différentes ou peut-il y avoir des lignes identiques ?
      0
      1. Oui, toutes les lignes sont identiques dans les deux fichiers
        0
        1. Modérateur
          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
          1. 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
            1. Modérateur
              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