UPDATE: Problem solved! Thanks everyone for all of the help!

Hi, I have the following data:

---------- <DATA> ------------ Oct 17 10:35:39 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2 +55.255.255.255! Occurred 1 time. (2012 17 10:35:39) Oct 17 10:35:40 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2 +55.255.255.255! Occurred 1 time. (2012 17 10:35:40) Oct 17 10:35:41 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2 +55.255.255.255! Occurred 1 time. (2012 17 10:35:41) Oct 17 10:35:42 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2 +55.255.255.255! Occurred 1 time. (2012 17 10:35:42) Oct 17 10:35:43 esw001tff2 [Root]Server reset. Occurred 1 time. (2012 +17 10:35:43) Oct 17 10:35:44 esw001tff2 [Root]Server reset. Occurred 1 time. (2012 +17 10:35:44) Oct 17 10:35:45 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2 +55.255.255.255! Occurred 1 time. (2012 17 10:35:45) Oct 17 10:35:46 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2 +55.255.255.255! Occurred 1 time. (2012 17 10:35:46) Oct 17 10:35:47 esw001tff2 [Root]Root login failure! Occurred 1 time. +(2012 17 10:35:47) Oct 17 10:35:48 esw001tff2 [Root]Root login failure! Occurred 1 time. +(2012 17 10:35:48) Oct 17 10:35:49 esw001tff2 [Root]Root login failure! Occurred 1 time. +(2012 17 10:35:49) Oct 17 10:35:50 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2 +55.255.255.255! Occurred 1 time. (2012 17 10:35:50)

I'll try to explain what I'm trying to do the best I can. I'm trying to get an output that looks like the following:

DEVICE --> esw001tff2 DATE --> Oct 17 TIME --> 10:35:39 ERROR --> IP Spoofing from 255.255.255.255 to 255.255.255.255! Occurr +ed 1 time. The above error occurred 7 times

The code I'm using looks like the following:

my %error_count; my (@data = <DATA>, @list, @splitter); foreach (@data) { $error_count{$1}++ if m/\](.*)\(20/, @data; @splitter = split (/\s/, @data); push (@list, @splitter); } for (keys %error_count) { print "DEVICE\t--> $list[3]\n"; print "DATE\t--> $list[0] $list[1]\n"; print "TIME\t--> $list[2]\n"; print "ERROR\t--> "$_\n"; print "\nThe above error occurred $error_count{$_} times\n"; }

The problem is, I can't get the array to update with the hash output. In the output, it gives me the correct count of the errors, but it just takes the first device, time and date and sticks them in the output. I need the device, date and time to be correct with the count.

For the time, I just need the first time that the error occurred, like on this one the time for the IP Spoofing would be 10:35:39, and root login failure would be 10:35:47

This code is the code I remember from work. I don't have the actual code with me, but I wrote it all so it should be accurate

Thank you if you can help


In reply to Counting keys in a hash by cspctec

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.