in reply to Re^3: print lines withing specific date range from maillog file
in thread print lines withing specific date range from mailoog file

Sorry for the delay in writing.

I still can NOT get it DONE. I got today's time and yesterday's time as well ( ie = - 86400)

But i get below error while running the code.

perl auto_date_range.ok.pl

Mar 28 16:56:55

yesterday Mar 27 16:56:55

today Mar 28 16:56:55

Sun Mar 27 16:56:55 2016

Mon Mar 28 16:56:55 2016

Error parsing time at /usr/lib64/perl5/vendor_perl/Time/Piece.pm line 469.

#!/usr/bin/perl use strict; use warnings; #use 5.010; use Time::Piece; #use Time::Seconds; my $format = '%b %e %T'; my $time = Time::Piece->new; #my $yesterday = $time - ONE_DAY; my $yesterday = $time - 86400; print $time->strftime('%b %e %T'),"\n"; #print $time->strftime('%b %e'),"\n"; print "yesterday\t", $yesterday->strftime('%b %e %T'),"\n"; print "today\t", $time->strftime('%b %e %T'),"\n"; print $yesterday,"\n"; print $time,"\n"; #print "yesterday\t", $yesterday,"\n"; #print "today\t", $time,"\n"; ##my $start = Time::Piece->strptime('Mar 27', $format); my $start = Time::Piece->strptime('$yesterday', $format); #this DOES N +OT work #my $start = Time::Piece->strptime('Feb 1 10:30:00', $format); ##my $end = Time::Piece->strptime('Mar 28', $format); my $end = Time::Piece->strptime('$time', $format); #this DOES NOT wo +rk #my $end = Time::Piece->strptime('Feb 2 10:30:00', $format); print "yesterday\t", $yesterday,"\n"; print "today\t", $time,"\n"; open(FILE, "/var/log/maillog") or die "Couldn't open maillog: $!; abor +ting"; while (<FILE>) { my ($timestamp) = /(^\w+\s+\d+\s+\d\d:\d\d:\d\d)/; my $t = Time::Piece->strptime($timestamp, $format); print if $t >= $start && $t <= $end; } close(FILE);

Pls help me to solve this issue

Replies are listed 'Best First'.
Re^5: print lines withing specific date range from maillog file
by Corion (Patriarch) on Mar 28, 2016 at 11:45 UTC
    my $start = Time::Piece->strptime('$yesterday', $format);

    Please read perlsyn on quotes and quote-like operators. Single quotes do not interpolate. You should use instead:

    my $start = Time::Piece->strptime($yesterday, $format);

      Hi Monks, I finally suceeded in doing it. it works as expected. Script (my_script.pl) is given below.

      #!/usr/bin/perl use strict; use warnings; use Time::Piece; use POSIX qw(strftime); my $format = '%b %e %T'; my $today = time; my $formatted_today = strftime "%b %e %T", ( localtime($today) ); my $yesterday = $today - 60 * 24 * 60; my $formatted_yesterday = strftime "%b %e %T", ( localtime($yesterday) + ); #print "VAR1 TODAY $today\n"; #print "VAR2 YESTERDAY $yesterday\n"; #print "\n"; #print "formatted_TODAY $formatted_today\n"; #print "formatted_YESTERDAY $formatted_yesterday\n"; #print "\n"; my $start = Time::Piece->strptime($formatted_yesterday, $format); my $end = Time::Piece->strptime($formatted_today, $format); print "VARIABLE END TODAY $end\n"; print "VARIABLE START YESTERDAY $start\n"; print "\n"; open(FILE, "/var/log/maillog") or die "Couldn't open maillog: $!; abor +ting"; while (<FILE>) { my ($timestamp) = /(^\w+\s+\d+\s+\d\d:\d\d:\d\d)/; my $t = Time::Piece->strptime($timestamp, $format); print if $t >= $start && $t <= $end; } close(FILE);