in reply to Problems in dates and time additions by one minute

You didn't give us source data, only the end result, so I had to extrapolate the source data. Here's some code that should hopefully do more or less what you want - expanding it further is left up to you.

use Time::Local; use strict; use warnings; my $word = 'bravo'; my $year = (localtime())[5] + 1900; my @months = qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/; my %months; $months{$months[$_]} = $_ for 0..11; my ($ts, $min, $max, %results, $d1, $d2); while (<DATA>) { chomp; ### Calculate timestamp for start of given minute if (m/(\w+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+(.*)/) { $ts = timelocal(0, $4, $3, $2, $months{$1}, $year); ### Count instances of word for (split /\s+/, $6) { $results{$ts}++ if uc $_ eq uc $word; } } } ### Sort results by timestamp for $ts (sort { $a <=> $b } keys %results) { ### Start date / time (00) $d1 = [localtime($ts)]; $d1 = $months[$d1->[4]] . sprintf(' %02d %02d:%02d:%02d', $d1->[3], $d1->[2], $d1->[1], $d1->[0]); ### End date / time (59) $d2 = [localtime($ts + 59)]; $d2 = $months[$d2->[4]] . sprintf(' %02d %02d:%02d:%02d', $d2->[3], $d2->[2], $d2->[1], $d2->[0]); ### If you want first, second, third, etc, you'll have ### to implement that part yourself print "$d1 $d2 $results{$ts} matches\n"; } __DATA__ Dec 5 09:02:01 alpha bravo charlie Dec 5 09:02:02 bravo Dec 17 17:34:02 bravo charlie tango

Replies are listed 'Best First'.
Re^2: Problems in dates and time additions by one minute
by Survivor (Initiate) on Dec 19, 2011 at 22:09 UTC
    Thanks for every one for helping me. The reply form "TJPride" has solved my problem, Thank you very much. Now i can further modify it. Could you please explain me these lines a bit more.
    for (split /\s+/, $6) { $results{$ts}++ if uc $_ eq uc $word; for $ts (sort { $a <=> $b } keys %results) { ### Start date / time (00) $d1 = [localtime($ts)]; $d1 = $months[$d1->[4]] . sprintf(' %02d %02d:%02d:%02d', $d1->[3], $d1->[2], $d1->[1], $d1->[0]);
      What in particular is not clear to you in these snippets?

      In the first part, $6 contains whatever was matched by the 6th set of parens in the previous regex match (basically, everything in the log entry following the time stamp string), $ts is the "seconds since the epoch" time-stamp that corresponds to the matched time stamp string in the log entry, and the if statement returns true on any case-insensitive match of a "word" token from the log entry to the target $word.

      The second part is a loop over hash keys that are being sorted numerically. The first line in the loop creates an array ref containing the list of values returned by localtime, and then uses selected values from that array to create a string that is formatted the same way as the original log entry time stamp string.