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

In general, "yesterday" is just 24 hours before today, except for days where the daylight savings time changes. Time::Piece has documented methods for date/time arithmetic, and it even includes an example to add one day. But I'm quite certain that the example can be modified to subtract one day as well.

What problems did you encounter when using the documented arithmetic methods with your objects?

  • Comment on Re^3: print lines withing specific date range from maillog file

Replies are listed 'Best First'.
Re^4: print lines withing specific date range from maillog file
by theravadamonk (Scribe) on Mar 28, 2016 at 11:30 UTC

    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

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