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

Hi, This seems to work. Here's my date_range.ok.pl file.
#!/usr/bin/perl use strict; use warnings; use Time::Piece; my $format = '%b %e %T'; my $start = Time::Piece->strptime('Feb 1 10:30:00', $format); my $end = Time::Piece->strptime('Feb 2 10:30:00', $format); 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);
I hardcoded below 2 things.
my $start = Time::Piece->strptime('Feb 1 10:30:00', $format); my $end = Time::Piece->strptime('Feb 2 10:30:00', $format);

Now I want system to fill today's date and yesterday's date? instead of Feb 16 and Feb 17

I want system to fill Mar 16 and Mar 17

Time range (10.30 to 10.30) is OK. I can hardcode it.

Any comment?

Replies are listed 'Best First'.
Re^3: print lines withing specific date range from maillog file
by Corion (Patriarch) on Mar 17, 2016 at 12:03 UTC

    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?

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