[perl] Extraire la derniere ligne d'un fichie [Résolu/Fermé]

Signaler
-
 fxta -
Bonjour, je souhaiterai tout simplement extraire la derniere ligne d'un fichier texte sachant que celui ci est de taille variable et que je ne connais aucun mot de la dernière ligne ni de celle d'avant.

J'ai essayé avec la fonction reverse :

open(FENT, '< logwls.txt'); 
foreach my $line (reverse(<FENT> )) { 
 print $line; 
} 
close(FENT);


Le $line me met bien ma derniere ligne en premier mais je n'arrive pas à extraire uniquement cette ligne.

ps : pour les curieux le fichier est de la forme

[info]balbalbalblablabalbalba
[info]balbalbalblablabalbalba
[info]balbalbalblablabalbalba
<2009-17-12 08h14><inbox><listenning on port xxxxxxx>
<2009-17-12 11h00><inbox><listenning on port xxxxxxx>
<2009-17-12 12h20><inbox><listenning on port xxxxxxx>


mais tres difficile d'utiliser les regex car aucun fichier ne se termine de la meme maniere.

Merci.

4 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Re,

Une autre méthode
#!/usr/bin/perl
use strict;use warnings;

open FENT, '< logwls.txt' or die "E/S : $!\n";;
chomp(my $derniere = (reverse(<FENT>))[0]);
print $derniere,"\n";
close(FENT);
__END__



3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Salut,

Pas besoin des regex ;-)
lami20j@debian:~/trash/ccm_perl$ cat logwls.txt
info]balbalbalblablabalbalba
[info]balbalbalblablabalbalba
[info]balbalbalblablabalbalba
<2009-17-12 08h14><inbox><listenning on port xxxxxxx>
<2009-17-12 11h00><inbox><listenning on port xxxxxxx>
<2009-17-12 12h20><inbox><listenning on port xxxxxxx>
lami20j@debian:~/trash/ccm_perl$
lami20j@debian:~/trash/ccm_perl$ cat derniereligne.pl
#!/usr/bin/perl

open FENT, '< logwls.txt' or die "E/S : $!\n";;
foreach my $line (reverse(<FENT> )) {
         print $line and last; # je sors de la boucle après le 1er print
}
close(FENT);
__END__
lami20j@debian:~/trash/ccm_perl$
lami20j@debian:~/trash/ccm_perl$ perl derniereligne.pl
<2009-17-12 12h20><inbox><listenning on port xxxxxxx>

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Re,

Et pour la récupérer

#!/usr/bin/perl
use strict;use warnings;
my $derniere;

open FENT, '< logwls.txt' or die "E/S : $!\n";;
foreach (reverse(<FENT> )) {
        chomp($derniere=$_) and last;
}
print $derniere,"\n";
close(FENT);
__END__


Exécution

lami20j@debian:~/trash/ccm_perl$ perl derniereligne.pl
<2009-17-12 12h20><inbox><listenning on port xxxxxxx>

Merci beaucoup lami20j. Petite préférence pour la derniere méthode, c'est exactement ce que je voulais !

Bonne journée.