|
|
|
|
Bonjour,
j'ai un fichier dont toutes les lignes sont horodatées (aammjj-hhmmss) :
070522-111819>
070522-111819> Start time: Tue May 22 11:17:26 2007
070522-111819> End time: Tue May 22 11:18:19 2007
070522-111819>
070522-111819>
070522-111819> --- Never Started Save Sets ---
Et je cherche une méthode en perl pour extraire toutes les lignes qui sont postérieures à une date et une heure donnée pour les traiter, dans le but de gagner en vitesse de traitement (mon fichier est un log de plusieurs centaines de milliers de lignes...)
Quelqu'un aurait quelque chose à me proposer ?
Merci d'avance.
A+ Blux "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
L'exemple ne suffit pas ?
|
L'exemple ne suffit pas ?
open LIRE,"tonfichier" or die "E/S : $!\n";
open ECRIRE, ">resultat" or die "E/S : $!\n";
$date='ta_date';
$heure='heure';
while(<LIRE>){
print ECRIRE if /${date}-$heure/ .. eof;
}--
lami20j |
Re,
#!/usr/bin/perl
while(<DATA>){
print if /DEBUT/ .. /FIN/;
}
__END__
DEBUT de la chaine, jusqu'à la FIN
comprendre les opérateurs .. et ...
FINLe résultat est
DEBUT de la chaine, jusqu'à la FIN Pour ...
#!/usr/bin/perl
while(<DATA>){
print if /DEBUT/ ... /FIN/;
}
__END__
DEBUT de la chaine, jusqu'à la FIN
comprendre les opérateurs .. et ...
FINLe résultat est
DEBUT de la chaine, jusqu'à la FIN comprendre les opérateurs .. et ... FIN L'opérateur .. teste les deux conditions sur la même ligne, donc si le test est vérifié alors il retourne VRAI jusqu'à quand il FIN est vérifié, et il s'arrête. Le cycle ne recommence plus puisque DEBUT n'est plus vérifié. L'opérateur ... va continue jusqu'à la prochaine ligne qui contient FIN. L'opérateur ... ne teste pas les conditions dans le même temps. Un autre comportement spécial c'est dans le cas d'utilisation de numéro de ligne au lieu des regex. On ne peux pas écrire $debut = 10; $fin = 100; print if $debut .. $fin; On peut écrire print if 1..10;ou $debut = 10; $fin = 100; print if $. == $debut .. $. == $fin; lami20j
|
Salut,
|
J'ai quand même un souci : si la forme recherchée n'existe pas, alors on ne recopie rien...
|
Salut,
|
TOUTES les lignes commencent par aammjj-hhmmss.
|
Salut,
#!/usr/bin/perl
use strict;use warnings;
print "Entrez la date et heure de debut, format yymmddhhmmss [par défaut 070519011112] : ";
chomp(my $lim = <STDIN>);
$lim ||= '070519011112';
while (<DATA>){
/^(\d+)-(\d+)\D/;
print if ($1 . $2) >= $lim;
}
__END__
070510-011110> NetWorker savegroup: (notice) G-PLANETE completed
070510-011110>
070510-011110> Succeeded: mars, jupiter, io, neptune
070510-011110>
070510-011110> Start time: Fri May 18 21:30:00 2007
070510-011110> End time: Sat May 19 01:11:14 2007
070510-011110>
070510-011110>
070510-011110> --- Successful Save Sets ---
070519-011115> --- LIMITE
070519-011115> mars: /app/v2i03 level=incr, 0 KB 00:00:08 0 files
070519-011115> mars: /app/wui03 level=incr, 0 KB 00:00:03 0 files
070519-011115> mars: /app/x2i03 level=incr, 0 KB 00:00:02 0 files
070519-011116> mars: /log/tbi03 level=incr, 0 KB 00:00:03 0 files
070519-011116> mars: /svg/svi03 level=incr, 0 KB 00:00:04 0 files
070519-011116> mars: /app/svi03 level=incr, 0 KB 00:00:04 0 files
070519-011116> mars: /app/cii03 level=incr, 0 KB 00:00:02 0 files
070531-061312
070531-061412
070531-061512
070531-081212
070531-091212
070531-091116> mars: /fic/mitci03 level=incr, 0 KB 00:00:03 0 files
070531-091116> mars: /log/mitci03 level=incr, 0 KB 00:00:03 0 files
070532-061116> mars: /app/mitci03 level=incr, 0 KB 00:00:03 0 files
Le résultat
La comparaison je la fait par rapport à la date et heure 070519011112 qui n'existe pas lami20j@debian:~$ perl ccm.pl Entrez la date et heure de debut, format yymmddhhmmss [par défaut 070519011112] : 070519-011115> --- LIMITE 070519-011115> mars: /app/v2i03 level=incr, 0 KB 00:00:08 0 files 070519-011115> mars: /app/wui03 level=incr, 0 KB 00:00:03 0 files 070519-011115> mars: /app/x2i03 level=incr, 0 KB 00:00:02 0 files 070519-011116> mars: /log/tbi03 level=incr, 0 KB 00:00:03 0 files 070519-011116> mars: /svg/svi03 level=incr, 0 KB 00:00:04 0 files 070519-011116> mars: /app/svi03 level=incr, 0 KB 00:00:04 0 files 070519-011116> mars: /app/cii03 level=incr, 0 KB 00:00:02 0 files 070531-061312 070531-061412 070531-061512 070531-081212 070531-091212 070531-091116> mars: /fic/mitci03 level=incr, 0 KB 00:00:03 0 files 070531-091116> mars: /log/mitci03 level=incr, 0 KB 00:00:03 0 files 070532-061116> mars: /app/mitci03 level=incr, 0 KB 00:00:03 0 fileslami20j |
Et si je ne veux tester que l'heure, ça ne marche pas avec ça :
lami20j@debian:~/trash$ cat ccm.pl
#!/usr/bin/perl
use strict;use warnings;
print "Entrez la date et heure de debut, format yymmddhh [par défaut 07051901] : ";
chomp(my $lim = <STDIN>);
$lim ||= '070519011112';
while (<DATA>){
/^(\d+)-(\d{2})/;
print if ($1 . $2) >= $lim;
}
__END__
070510-011110> NetWorker savegroup: (notice) G-PLANETE completed
070510-011110>
070510-011110> Succeeded: mars, jupiter, io, neptune
070510-011110>
070510-011110> Start time: Fri May 18 21:30:00 2007
070510-011110> End time: Sat May 19 01:11:14 2007
070510-011110>
070510-011110>
070510-011110> --- Successful Save Sets ---
070519-011115> --- LIMITE
070519-011115> mars: /app/v2i03 level=incr, 0 KB 00:00:08 0 files
070519-011115> mars: /app/wui03 level=incr, 0 KB 00:00:03 0 files
070519-011115> mars: /app/x2i03 level=incr, 0 KB 00:00:02 0 files
070519-011116> mars: /log/tbi03 level=incr, 0 KB 00:00:03 0 files
070519-011116> mars: /svg/svi03 level=incr, 0 KB 00:00:04 0 files
070519-011116> mars: /app/svi03 level=incr, 0 KB 00:00:04 0 files
070519-011116> mars: /app/cii03 level=incr, 0 KB 00:00:02 0 files
070531-061312
070531-061412
070531-061512
070531-081212
070531-091212
070531-091116> mars: /fic/mitci03 level=incr, 0 KB 00:00:03 0 files
070531-091116> mars: /log/mitci03 level=incr, 0 KB 00:00:03 0 files
070532-061116> mars: /app/mitci03 level=incr, 0 KB 00:00:03 0 files
lami20j@debian:~/trash$ perl ccm.pl
Entrez la date et heure de debut, format yymmddhh [par défaut 07051901] : 07051901
070519-011115> --- LIMITE
070519-011115> mars: /app/v2i03 level=incr, 0 KB 00:00:08 0 files
070519-011115> mars: /app/wui03 level=incr, 0 KB 00:00:03 0 files
070519-011115> mars: /app/x2i03 level=incr, 0 KB 00:00:02 0 files
070519-011116> mars: /log/tbi03 level=incr, 0 KB 00:00:03 0 files
070519-011116> mars: /svg/svi03 level=incr, 0 KB 00:00:04 0 files
070519-011116> mars: /app/svi03 level=incr, 0 KB 00:00:04 0 files
070519-011116> mars: /app/cii03 level=incr, 0 KB 00:00:02 0 files
070531-061312
070531-061412
070531-061512
070531-081212
070531-091212
070531-091116> mars: /fic/mitci03 level=incr, 0 KB 00:00:03 0 files
070531-091116> mars: /log/mitci03 level=incr, 0 KB 00:00:03 0 files
070532-061116> mars: /app/mitci03 level=incr, 0 KB 00:00:03 0 files
lami20j@debian:~/trash$
lami20j |
tu aurais des références de littérature
|
Regexp en perl : http://perldoc.perl.org/perlretut.html
|