> Oui effectivement il fonctionne ce script perl... mea culpa.
> C'est simplement le fichier initial (pas de retour chariot à
> l'intérieur des lignes) qui diffère du fichier actuel (retours
> chariot dans les lignes).

hello, 

il y a pas mal d'amélioration possibles pour rendre ton script
un peu plus facile a maintenir mais voilà celle qui me parait la plus
intéressante

tu écris 

my %lines;
foreach (<$old>) {
      my ($f1, $f2, $f3, $email, $f4, $f5, $f6, $f7,$f8) = split /;/;
      $lines{$email} = 1;
}

hors seul le champ $email t'intéresse alors ne garde que celui-ci

my %lines;
foreach (<$old>) {
      my $email = (split /;/)[3];
      $lines{$email} = 1;
}

et là on se rend compte que lines ne contient pas des lignes
mais une paire pour chaque ligne avec une adresse email en clef et
1 comme valeur unique ( $email => 1 ). du coup on peut écrire

my %found_email = map { (split /;/)[3] => 1 } <$old>;

de meme on filtrera ton 2eme fichier presque de la meme manière

map {print if $found_email{ (split /;/)[3] } <$new>;

marc

Répondre à