Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re^2: Counting In a Log File from Multiple Variables

by monger (Friar)
on Sep 02, 2004 at 19:08 UTC ( #388058=note: print w/ replies, xml ) Need Help??


in reply to Re: Counting In a Log File from Multiple Variables
in thread Counting In a Log File from Multiple Variables

Thanks Rhose. This has it started.

I did some mods to the code for my environment, and not being fluent yet in HoHs, or any more advanced data structures, I'm going to throw back my mods and plea for aid. I've looked at the perldsc, but I'm still a bit fuzzy. Heading in the right direction, but need a bit more of a push. Here the code:

#!/usr/bin/perl use strict; use warnings; my $line; my $Error; my $Data; my $File = "L:\\cybor\\20040831.log"; open FILE, $File || die "Can't open log file: $!"; while(<FILE>) { # chomp; #@_=split(','); foreach $line (<FILE>) { @_=split(','); $Data->{$_[1]}->{$_[3]}++; } } foreach my $User (sort keys %{$Data}) { print 'User: ',$User,"\n"; foreach my $Error (sort keys %{$Data->{$User}}) { print ' [',$Error,'] happened ',$Data->{$User}->{$Error},' time(s +)',"\n"; } }

Here's the output from cygwin:

User: wfmccahi [P - Password Reset ] happened 172 time(s +)

So, it's not counting quite right. The phrase "P - Password Reset" only occurs four times in the file in question. Any suggestions?

Thanks, monger

Monger +++++++++++++++++++++++++ Munging Perl on the side


Comment on Re^2: Counting In a Log File from Multiple Variables
Select or Download Code
Re^3: Counting In a Log File from Multiple Variables
by Rhose (Priest) on Sep 02, 2004 at 19:48 UTC
    I would change:

    while(<FILE>) { # chomp; #@_=split(','); foreach $line (<FILE>) { @_=split(','); $Data->{$_[1]}->{$_[3]}++; } }

    to

    while(<FILE>) { chomp; @_=split(','); $Data->{$_[1]}->{$_[3]}++; }

    The "chomp" will get rid of that pesky newline you are seeing in the output. Also, the "while(<FILE>)" will process each line of your file (one at a time) and will assign each line to $_. This means your "foreach $line (<FILE>)" is not needed.

    Note: The foreach loop in your code would assign data to the $line variable. Your split is splitting $_ (nothing specified mean you get to use the default $_)... if you were to use your foreach, you would want to change your split to "@_=split(',',$line);"

      Thanks Rhose. Worked like a charm. Now to look at expanding to count some more fields. Now my feet are a bit wetter, I think I'm in business! monger
      Monger +++++++++++++++++++++++++ Munging Perl on the side

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://388058]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (10)
As of 2014-09-17 18:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (94 votes), past polls