Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re^2: Extracting Log File data for a given date range

by vishi (Beadle)
on Dec 14, 2011 at 05:39 UTC ( #943477=note: print w/replies, xml ) Need Help??

in reply to Re: Extracting Log File data for a given date range
in thread Extracting Log File data for a given date range

Thanks all for the overwhelming response!! I cracked this one with the CPAN modules Date::Simple and Date::Range. I was able to get the dates in the format I wanted and put all of them in an array.

May be this implementation is a bit "noobish" or elaborate... but it worked! I will definitely make note of all your suggestions, and perhaps, may be get to use it when I face a similar problem in future.

Okay! Here's what I did :D .....

my $date1 = $ARGV[0]; my $date2 = $ARGV[1]; my ( $start, $end ) = ( date($date1), date($date2) ); my $range = Date::Range->new( $start, $end ); my @all_dates = $range->dates; my %hash=("01"=>"Jan","02"=>"Feb","03"=>"Mar","04"=>"Apr","05"=>"May", +"06"=>"Jun","07"=>"Jul","08"=>"Aug","09"=>"Sep","10"=>"Oct","11"=>"No +v","12"=>"Dec"); foreach my $numericDate (@all_dates) { while ( my ($key, $value) = each(%hash) ) { $numericDate =~ s/\-$key-/\-$value\-/g; } } my @tempArray; foreach my $reverseDate (@all_dates) { split (/-/,$reverseDate); my $correctFormat = $_[2]."-".$_[1]."-".$_[0]; push (@tempArray, $correctFormat); } print "\n@tempArray\n";

So, the output looks something like this:

$ ./ 2011-12-10 2011-12-13 ============================== 10-Nov-2011 11-Nov-2011 12-Nov-2011 13-Nov-2011 14-Nov-2011 15-Nov-201 +1 16-Nov-2011 17-Nov-2011 18-Nov-2011 19-Nov-2011 20-Nov-2011 21-Nov- +2011 22-Nov-2011 23-Nov-2011 24-Nov-2011 25-Nov-2011 26-Nov-2011 27-N +ov-2011 28-Nov-2011 29-Nov-2011 30-Nov-2011 01-Dec-2011 02-Dec-2011 0 +3-Dec-2011 04-Dec-2011 05-Dec-2011 06-Dec-2011 07-Dec-2011 08-Dec-201 +1 09-Dec-2011 10-Dec-2011 11-Dec-2011 12-Dec-2011 13-Dec-2011 ==============================
Thanks a ton for all your suggestions!

Replies are listed 'Best First'.
Re^3: Extracting Log File data for a given date range
by Anonymous Monk on Dec 15, 2011 at 21:51 UTC
    I had this problem before. I ended up writing a utility script I call 'grange' for 'grep a range'. It depends on the fact that I'm usually parsing logfiles so the dates are sequential. So I used the range operator .. to match lines between the start and end regexes. If that matches your situation, then here's the whole utility:
    #!/usr/bin/perl -n BEGIN { print "Usage: $0 <start pattern> <end_pattern>\n" and exit unless +@ARGV == 2; $start = shift @ARGV; $end = shift @ARGV; } next if 1 .. /$start/; last if /$end/; print
      It's a great "fewliner", but won't work if there are no log lines for either start or end position.
        Sure it will
Re^3: Extracting Log File data for a given date range
by Anonymous Monk on Jun 11, 2014 at 17:57 UTC
    Hey, Here is the error I am getting when I run your code: Useless use of split in void context at C:\Prady\perl files\ line 31. Undefined subroutine &main::date called at C:\Prady\perl files\ line 12. Line 31 is : split (/-/,$reverseDate); Line 12 is : my ( $start, $end ) = ( date($date1), date($date2) ); Please help me find out what I am missing.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://943477]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2018-02-21 06:18 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (275 votes). Check out past polls.