supprimer des lignes contenant une valeur donnée - Perl - Programmation
Marsh Posté le 06-04-2014 à 15:45:57
Vous ne voulez que la première ligne trouvée par valeur de sent?
Et les lignes sans sent, on en fait quoi?
En tout cas, il faut procéder ainsi:
# vous créez un hash dont les clés seront les valeurs de sent
my %sent;
Dans la boucle de lecture du fichier
while (<$fhin> ) {
# vous testez s'il y a un sent et vous capturez son contenu dans un groupe
if (/status=sent\s*(\([^)]+)/) {
# vous testez si on a déjà trouvé une telle valeur de contenu
unless ($sent{$1}) {
# pas trouvé, on en met la valeur a 1 et on envoie sur le fichier de sortie
$sent{$1} = 1;
print $fhout $_;
}
}
else {
# et a vous d'envoyer ou pas une ligne sans sent en sortie en décommentant si nécessaire
# print $fhout $_;
}
}
ou bien vous ne voulez que les lignes qui ont status=sent?
C'est plus facile alors:
while (<$fhin> ) {
print $fhout $_ if (/status=sent/);
}
($fhin et $fhout: handles du fichier en entrée et de celui en sortie).
A+,
Marsh Posté le 06-04-2014 à 22:15:49
Donc c'est ce que j'ai dit, on ne garde que les lignes avec sent.
while (<$fhin> ) {
print $fhout $_ if (/status=sent/);
}
je vous laisse faire autour ce qu'il faut (ouverture et fermeture des fichiers)
A+,
Marsh Posté le 06-04-2014 à 15:01:30
Bonjour,
j'ai un fichier log que je veux le nettoyer par supprimer les lignes qu'ont une valeur différente de sent
mon fichier est structurécomme suit:
[url]Mar 2 05:14:11 smtp p/smtp[***], relay=**.**.**:**, delay=0.**, dsn=*.*.*, status=sent (** *.0.0 Ok: queued as *******)
Mar 2 05:14:11 smtp p/smtp[***], relay=**.**.**:**, delay=0.**, dsn=*.*.*, status=deffered (** *.0.0 Ok: queued as *******)
Mar 2 05:14:11 smtp p/smtp[***], relay=**.**.**:**, delay=0.**, dsn=*.*.*, status=rejected (** *.0.0 Ok: queued as *******)[/url]