in reply to print lines withing specific date range from mailoog file

Personally, I would use a premade solution like dategrep. But if you want to write this yourself, perlre is a good starting point. Show us the code you've already written and where it fails to do what you want. We will help you with that part.

Also, please update your node to clearly separate data from prose. Use <code>...</code> tags around your code and your data. Thanks!

Replies are listed 'Best First'.
Re^2: print lines withing specific date range from maillog file
by theravadamonk (Scribe) on Mar 17, 2016 at 10:56 UTC
    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?

      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