Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-25 Par sujet Migrec



Le 25/10/2017 à 10:54, Marc Chantreux a écrit :

salut,


#!/usr/bin/perl -w

my $file1 =  $ARGV[0];
my $file2 =  $ARGV[1];

open(my $old, '<', $file1) or die "Can't open $file1: $!";
open(my $new, '<', $file2) or die "Can't open $file2: $!";

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

pe en rajoutant chomp ?

my ($new,$old) =
map { open my $fh, '<', $_ or die "Can't open $_: $!"; $fh }
@ARGV;

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

par contre: ton fichier est un CSV comme son nom l'indique: il y a
plein de cas que tu ne prend pas en compte en splitant naivement sur ';'
(par exemple un champ qui contiendrait un ";").

pour rendre ton script robuste, ne réinvente pas la roue et utilise
Text::CSV ou mieux  Text::CSV::Simple.

si j'en ai le temps, je t'écrirais un exemple plus tard.

Ça passe pas... :-(

$ ./listerLesNouveaux3.pl Ancien.csv Nouveau.csv
Adresseligne2";"";"";"";"";"";""RENOM";"nouveaunom.nouveaupre...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-25 Par sujet Marc Chantreux
salut,

> #!/usr/bin/perl -w
> 
> my $file1 =  $ARGV[0];
> my $file2 =  $ARGV[1];
> 
> open(my $old, '<', $file1) or die "Can't open $file1: $!";
> open(my $new, '<', $file2) or die "Can't open $file2: $!";
> 
> my %found_email = map { (split /;/)[3] => 1 } <$old>;
> map {print if not $found_email{ (split /;/)[3] }} <$new>;

pe en rajoutant chomp ?

my ($new,$old) =
map { open my $fh, '<', $_ or die "Can't open $_: $!"; $fh }
@ARGV;

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

par contre: ton fichier est un CSV comme son nom l'indique: il y a
plein de cas que tu ne prend pas en compte en splitant naivement sur ';'
(par exemple un champ qui contiendrait un ";").

pour rendre ton script robuste, ne réinvente pas la roue et utilise
Text::CSV ou mieux  Text::CSV::Simple.

si j'en ai le temps, je t'écrirais un exemple plus tard.

marc



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-25 Par sujet Stephane Ascoet
Bonjour, le trop peu connu "Docdiff" pourrait etre une solution. 
Explications sur (c'est un site un peu comme 
celui d'un colistier: 
 
mais dans lequel j'ai helas vu des erreurs/inextactitudes, donc mefiance 
avec les informations qui y figurent)

--
Cordialement, Stephane Ascoet



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-25 Par sujet Marc Chantreux
> >de meme on filtrera ton 2eme fichier presque de la meme manière
> >
> >map {print if $found_email{ (split /;/)[3] } <$new>;
> 
> Effectivement, c'est bien plus simple ainsi. Malheureusement, je n'y
> connais rien en perl... J'ai juste mis une négation (not)= après le
> dernier if afin de garder que les lignes différentes.

c'est donc

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

> Mais quoique je fasse, la sortie inclut toute de même les lignes
> faisait suite à un retour chariot... Solution temporaire : supprimer
> la colonne Adresse avec un tableur et passer le script.

oula ... je suis largé aussi ...

marc 



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-25 Par sujet Alexandre Hoïde
On Wed, Sep 20, 2017 at 04:48:43PM +0200, Migrec wrote:
> Bonjour,

  Bonjour Migrec,

> J'ai un fichier CSV avec des identifiants, des mots de passes et quelques
> autres données.
> J'aimerai extraire les lignes ajoutées au fichier ANCIEN.csv par rapport au
> fichier NOUVEAU.csv. Certains lignes ont été modifiées et celles-ci ne
> m'intéressent pas. À noter que j'ai une adresse mail dans chaque ligne qui
> pourrait servir d'identifiant unique...
> 
> Comment feriez-vous ?

  Je ne vais pas interférer avec votre discussion pour une solution en
Perl, mais je signale une autre option :

$ diff --old-line-format="" --new-line-format='%L' 
--unchanged-line-format=""  

  Les options de « diff » suivantes pourraient également t'être utiles :
  --ignore-blank-lines
  --ignore-case
  --ignore-space-changes

  Pas sûr que cela soit nécessaire mais l'utilitaire suivant pourrait
également t'être utile : $ apt show dos2unix

-- 
 ___
| $ post_tenebras ↲ | waouh!
| GNU\ /|\
|  -- * --  | o
| $ who ↲/ \|_-- ~_|
| Alexandre Hoïde   |  _/| |
 ---



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-25 Par sujet Migrec

Le 25/10/2017 à 09:00, Dominique Dumont a écrit :

On Tuesday, 24 October 2017 21:46:28 CEST Migrec wrote:

Mais quoique je fasse, la sortie inclut toute de même les lignes faisait
suite à un retour chariot... Solution temporaire : supprimer la colonne
Adresse avec un tableur et passer le script.

Je ne comprends toujours pas le problème. Envoie un exemple si tu veux qu'on
t'aide plus. Sinon on perd trop de temps.
Merci ! J'ai du épurer le fichier des données véritables mais en gros ça 
donne ceci :


Le fichier Ancien.csv :
"ProfilA";"NOM1";"Prénom1";"prenom1.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"NOM2";"prenom2";"prenom2.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"NOM2";"prenom3";"prenom3.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"NOM2";"prenom4";"prenom4.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"nom3";"prenom5";"prenom5.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"nom4";"prenom6";"prenom6.n...@domaine.fr";"AdresseLigne1$Adresseligne2";"";"";"";"";"";""
"ProfilB";"nom4";"prenom7";"prenom7.n...@domaine.fr";"Adresseligne1";"";"";"";"";"";""
"ProfilB";"nom4";"prenom8";"prenom8.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""

Le fichier Nouveau CSV :
"ProfilA";"NOM1";"Prénom1";"prenom1.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"NOM2";"prenom2";"prenom2.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilB";"NOUVEAUNOM";"NOUVEAUPRENOM";"nouveaunom.nouveaupre...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"NOM2";"prenom3";"prenom3.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"NOM2";"prenom4";"prenom4.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"nom3";"prenom5";"prenom5.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"nom4";"prenom6";"prenom6.n...@domaine.fr";"AdresseLigne1
Adresseligne2";"";"";"";"";"";""
"ProfilB";"nom4";"prenom7";"prenom7.n...@domaine.fr";"Adresseligne1";"";"";"";"";"";""
"ProfilB";"nom4";"prenom8";"prenom8.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""

$ ./listerLesNouveaux2.pl Aide\ Debian/Ancien.csv Aide\ Debian/Nouveau.csv
"ProfilB";"NOUVEAUNOM";"NOUVEAUPRENOM";"nouveaunom.nouveaupre...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
Adresseligne2";"";"";"";"";"";""


J'ai bien ma nouvelle ligne mais je me retrouve aussi avec cette ligne 
parasite qui est la suite d'une ligne se terminant par un retour chariot 
à la dos. Je précise que les fichiers sont encodés en dos. Ci-joint les 
fichiers pour examen.



$ cat listerLesNouveaux2.pl
#!/usr/bin/perl -w

my $file1 =  $ARGV[0];
my $file2 =  $ARGV[1];

open(my $old, '<', $file1) or die "Can't open $file1: $!";
open(my $new, '<', $file2) or die "Can't open $file2: $!";

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

--
Migrec
"ProfilA";"NOM1";"Prénom1";"prenom1.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"NOM2";"prenom2";"prenom2.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"NOM2";"prenom3";"prenom3.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"NOM2";"prenom4";"prenom4.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"nom3";"prenom5";"prenom5.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"nom4";"prenom6";"prenom6.n...@domaine.fr";"AdresseLigne1$Adresseligne2";"";"";"";"";"";""
"ProfilB";"nom4";"prenom7";"prenom7.n...@domaine.fr";"Adresseligne1";"";"";"";"";"";""
"ProfilB";"nom4";"prenom8";"prenom8.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"NOM1";"Prénom1";"prenom1.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"NOM2";"prenom2";"prenom2.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilB";"NOUVEAUNOM";"NOUVEAUPRENOM";"nouveaunom.nouveaupre...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"NOM2";"prenom3";"prenom3.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"NOM2";"prenom4";"prenom4.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""
"ProfilA";"nom3";"prenom5";"prenom5.n...@domaine.fr";"";"";"";"";"";"";""
"ProfilB";"nom4";"prenom6";"prenom6.n...@domaine.fr";"AdresseLigne1
Adresseligne2";"";"";"";"";"";""
"ProfilB";"nom4";"prenom7";"prenom7.n...@domaine.fr";"Adresseligne1";"";"";"";"";"";""
"ProfilB";"nom4";"prenom8";"prenom8.n...@domaine.fr";"AdresseLigne1";"";"";"";"";"";""


Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-25 Par sujet Dominique Dumont
On Tuesday, 24 October 2017 21:46:28 CEST Migrec wrote:
> Mais quoique je fasse, la sortie inclut toute de même les lignes faisait 
> suite à un retour chariot... Solution temporaire : supprimer la colonne 
> Adresse avec un tableur et passer le script.

Je ne comprends toujours pas le problème. Envoie un exemple si tu veux qu'on 
t'aide plus. Sinon on perd trop de temps.

-- 
 https://github.com/dod38fr/   -o- http://search.cpan.org/~ddumont/
http://ddumont.wordpress.com/  -o-   irc: dod at irc.debian.org



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-24 Par sujet Migrec

Le 24/10/2017 à 17:31, Marc Chantreux a écrit :

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>;


Effectivement, c'est bien plus simple ainsi. Malheureusement, je n'y 
connais rien en perl... J'ai juste mis une négation (not)= après le 
dernier if afin de garder que les lignes différentes.


Mais quoique je fasse, la sortie inclut toute de même les lignes faisait 
suite à un retour chariot... Solution temporaire : supprimer la colonne 
Adresse avec un tableur et passer le script.


--
Migrec



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-24 Par sujet Marc Chantreux
> 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



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-24 Par sujet Migrec

Le 24/10/2017 à 15:43, Dominique Dumont a écrit :

On Tuesday, 24 October 2017 14:52:55 CEST Migrec wrote:

e me retrouve avec un fichier issu de DOS (donc des fins de lignes avec
^M$). Jusque là tout va bien mais désormais, j'ai également un caractère
$ dans l'un des champs (c'est un champ de type adresse qui peut contenir
4 lignes donc 3 $ potentiellement).

Option 1
Je traite uniquement les lignes qui commencent par ". Je contourne le
problème. Comment puis-je faire cela ?

Option 2
J'indique à Perl qu'il s'agit de la même ligne lorsqu'il y a un $. Mais
comment ?

Pas sur de comprendre. Perl devrait traiter les '$' venant du fichier d'entrée
comme un autre caractère Bref ton script devrait fonctionner.

Si ce n'est pas le cas, il va nous falloir plus de détails (script et un
exemple d'entrée).


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).

--
Migrec



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-24 Par sujet Dominique Dumont
On Tuesday, 24 October 2017 14:52:55 CEST Migrec wrote:
> e me retrouve avec un fichier issu de DOS (donc des fins de lignes avec 
> ^M$). Jusque là tout va bien mais désormais, j'ai également un caractère 
> $ dans l'un des champs (c'est un champ de type adresse qui peut contenir 
> 4 lignes donc 3 $ potentiellement).
> 
> Option 1
> Je traite uniquement les lignes qui commencent par ". Je contourne le 
> problème. Comment puis-je faire cela ?
> 
> Option 2
> J'indique à Perl qu'il s'agit de la même ligne lorsqu'il y a un $. Mais 
> comment ?

Pas sur de comprendre. Perl devrait traiter les '$' venant du fichier d'entrée 
comme un autre caractère Bref ton script devrait fonctionner.

Si ce n'est pas le cas, il va nous falloir plus de détails (script et un 
exemple d'entrée).

HTH
-- 
 https://github.com/dod38fr/   -o- http://search.cpan.org/~ddumont/
http://ddumont.wordpress.com/  -o-   irc: dod at irc.debian.org



Re: Diff : obtenir uniquement les lignes ajoutées

2017-10-24 Par sujet Migrec

Le 20/09/2017 à 20:43, Migrec a écrit :
Je ne connais pas du tout le perl (et du coup pas tout compris...) 
mais j'ai réussi à bricoler un peu pour avoir un résultat qui me 
parait satisfaisant.

Merci beaucoup.

 Le script :
#!/usr/bin/perl -w

my $file1 =  $ARGV[0];
my $file2 =  $ARGV[1];

open(my $old, '<', $file1) or die "Can't open $file1: $!";
open(my $new, '<', $file2) or die "Can't open $file2: $!";


 # Lire et indexer le premier fichier
my %lines;
foreach (<$old>) {
   my ($f1, $f2, $f3, $email, $f4, $f5, $f6, $f7,$f8) = split /;/;
   $lines{$email} = 1;
}

# Imprimer ce qui n'est pas dans le premier fichier
foreach (<$new>) {
   my ($f1, $f2, $f3, $email, $f4, $f5, $f6, $f7,$f8) = split /;/;

print unless exists $lines{$email};
}


Bonjour,

Je déterre ce fil de discussion car l'interface qui produit mon fichier 
en entrée a changé. Grr.
Je me retrouve avec un fichier issu de DOS (donc des fins de lignes avec 
^M$). Jusque là tout va bien mais désormais, j'ai également un caractère 
$ dans l'un des champs (c'est un champ de type adresse qui peut contenir 
4 lignes donc 3 $ potentiellement).


Option 1
Je traite uniquement les lignes qui commencent par ". Je contourne le 
problème. Comment puis-je faire cela ?


Option 2
J'indique à Perl qu'il s'agit de la même ligne lorsqu'il y a un $. Mais 
comment ?


--
Migrec



Re: Diff : obtenir uniquement les lignes ajoutées

2017-09-20 Par sujet Migrec

Le 20/09/2017 17:25, Yves Rutschle a écrit :

On Wed, Sep 20, 2017 at 04:48:43PM +0200, Migrec wrote:

J'ai un fichier CSV avec des identifiants, des mots de passes et quelques
autres données.

C'est mal, il faut hacher les mots de passe.


Malheureusement, ce n'est pas moi qui produit le fichier...


J'aimerai extraire les lignes ajoutées au fichier ANCIEN.csv par rapport au
fichier NOUVEAU.csv. Certains lignes ont été modifiées et celles-ci ne
m'intéressent pas. À noter que j'ai une adresse mail dans chaque ligne qui
pourrait servir d'identifiant unique...

En Perl, avec un tableau associatif indexé par adresse mail,
par ex. avec des fichiers:

toto:tata:f...@bar.com:0:2


# Lire et indexer le premier fichier
my %lines;
foreach (<$file1>) {
my ($f1, $f2, $email, $f3, $f4) = split /:/;
$lines{$email} = 1;
}

# Imprimer ce qui n'est pas dans le premier fichier
foreach (<$file2>) {
my ($f1, $f2, $email, $f3, $f4) = split /:/;
print unless exists $lines{$email};
}



Je ne connais pas du tout le perl (et du coup pas tout compris...) mais 
j'ai réussi à bricoler un peu pour avoir un résultat qui me parait 
satisfaisant.

Merci beaucoup.

 Le script :
#!/usr/bin/perl -w

my $file1 =  $ARGV[0];
my $file2 =  $ARGV[1];

open(my $old, '<', $file1) or die "Can't open $file1: $!";
open(my $new, '<', $file2) or die "Can't open $file2: $!";


 # Lire et indexer le premier fichier
my %lines;
foreach (<$old>) {
   my ($f1, $f2, $f3, $email, $f4, $f5, $f6, $f7,$f8) = split /;/;
   $lines{$email} = 1;
}

# Imprimer ce qui n'est pas dans le premier fichier
foreach (<$new>) {
   my ($f1, $f2, $f3, $email, $f4, $f5, $f6, $f7,$f8) = split /;/;

print unless exists $lines{$email};
}



Re: Diff : obtenir uniquement les lignes ajoutées

2017-09-20 Par sujet Erwan David
Le 09/20/17 à 17:25, Yves Rutschle a écrit :
> On Wed, Sep 20, 2017 at 04:48:43PM +0200, Migrec wrote:
>> J'ai un fichier CSV avec des identifiants, des mots de passes et quelques
>> autres données.
> 
> C'est mal, il faut hacher les mots de passe.

ET les saler avant, contrairement au steak.



Re: Diff : obtenir uniquement les lignes ajoutées

2017-09-20 Par sujet Vincent Lefevre
On 2017-09-20 16:48:43 +0200, Migrec wrote:
> Bonjour,
> 
> J'ai un fichier CSV avec des identifiants, des mots de passes et quelques
> autres données.
> J'aimerai extraire les lignes ajoutées au fichier ANCIEN.csv par rapport au
> fichier NOUVEAU.csv. Certains lignes ont été modifiées et celles-ci ne
> m'intéressent pas. À noter que j'ai une adresse mail dans chaque ligne qui
> pourrait servir d'identifiant unique...
> 
> Comment feriez-vous ?

Donc ce que tu veux, ce sont toutes les lignes qui ont un nouvel
identifiant. Je vois deux solutions:

1. Écrire un script dans un langage qui supporte les tableaux
   associatifs (e.g. les hash en Perl), et utiliser l'identifiant
   comme clé. D'abord, définir les clés existantes en lisant
   ANCIEN.csv; dans un second temps, lire NOUVEAU.csv et tester
   pour chaque ligne si la clé est déjà utilisée.

2. Avec un script shell utilisant grep -f. Dans un premier temps, en
   lisant ANCIEN.csv, stocker la liste des identifiants à rejeter dans
   un fichier FILE. Dans un second temps, un truc du style:

 grep -v -f FILE NOUVEAU.csv

   (pas testé). Dans la liste de rejet, il faut faire attention sur
   les regexp, au cas une adresse mail peut avoir des caractères
   spéciaux, si une adresse mail peut être une sous-chaîne d'une
   autre, ou si elle peut apparaître ailleurs dans la ligne (i.e.
   pas comme identifiant). Bref, la solution (1) me semble plus
   simple.

-- 
Vincent Lefèvre  - Web: 
100% accessible validated (X)HTML - Blog: 
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)



Re: Diff : obtenir uniquement les lignes ajoutées

2017-09-20 Par sujet Yves Rutschle
On Wed, Sep 20, 2017 at 04:48:43PM +0200, Migrec wrote:
> J'ai un fichier CSV avec des identifiants, des mots de passes et quelques
> autres données.

C'est mal, il faut hacher les mots de passe.

> J'aimerai extraire les lignes ajoutées au fichier ANCIEN.csv par rapport au
> fichier NOUVEAU.csv. Certains lignes ont été modifiées et celles-ci ne
> m'intéressent pas. À noter que j'ai une adresse mail dans chaque ligne qui
> pourrait servir d'identifiant unique...

En Perl, avec un tableau associatif indexé par adresse mail,
par ex. avec des fichiers:

toto:tata:f...@bar.com:0:2


# Lire et indexer le premier fichier
my %lines;
foreach (<$file1>) {
   my ($f1, $f2, $email, $f3, $f4) = split /:/;
   $lines{$email} = 1;
}

# Imprimer ce qui n'est pas dans le premier fichier
foreach (<$file2>) {
   my ($f1, $f2, $email, $f3, $f4) = split /:/;
   print unless exists $lines{$email};
}


Pas testé!
Y.



Diff : obtenir uniquement les lignes ajoutées

2017-09-20 Par sujet Migrec

Bonjour,

J'ai un fichier CSV avec des identifiants, des mots de passes et 
quelques autres données.
J'aimerai extraire les lignes ajoutées au fichier ANCIEN.csv par rapport 
au fichier NOUVEAU.csv. Certains lignes ont été modifiées et celles-ci 
ne m'intéressent pas. À noter que j'ai une adresse mail dans chaque 
ligne qui pourrait servir d'identifiant unique...


Comment feriez-vous ?

--
Migrec