On Friday 07 December 2007 04:36, [EMAIL PROTECTED]
wrote:
> Hi,
Hello,
> I am not very good at perl however our systems use it and I am trying
> to write a few scripts to help our staff.
>
> I am trying to calculate the average CPU utilisation from a log file
> which is automatically generated.
>
> The columns are space seperated rather than comma.
>
> I found some code in this group but can't get my head around or
> change it enough to make it work for me.
>
> The file out looks like this: (cpuuse.out)
>
> Fri Dec 07 00:05:03 096 000 000 000 000 000 000 000
> 000 -001 000 000
> Fri Dec 07 00:06:04 096 000 000 000 000 000 000 000
> 000 -001 000 000
> Fri Dec 07 00:07:04 092 000 000 000 000 000 000 000
> 000 -001 000 000
> Fri Dec 07 00:08:04 097 000 000 000 000 000 000 000
> 000 -001 000 000
> Fri Dec 07 00:09:04 097 000 000 000 000 000 000 000
> 000 -001 000 000
> Fri Dec 07 00:10:04 096 000 000 000 000 000 000 000
> 000 -001 000 000
> Fri Dec 07 00:11:04 096 000 000 000 000 000 000 000
> 000 -001 000 000
> Fri Dec 07 00:12:04 098 000 000 000 000 000 000 000
> 000 -001 000 000
>
>
> I want to calculate the average of the numbers in column 5 (The ones
> in the 090's). Bare in mind there are more lines than this.
>
> The code I saw was:
>
> use strict;
> use warnings;
>
> my $file = $ARGV[0] || 'pickcpua.dat';
> my $col = $ARGV[1];
>
> open(my $CPUFILE, "<", $file) || die "Unable to open sorted file !";
>
> my @values;
> while (<$CPUFILE>) {
> chomp;
> my @col = split /,/; # Assume basic comma delimited
>
> if ($col[$ARGV[1]] > 0) {
> push @values, $col[$ARGV[1]]; # Column 2 is what we want
> }
>
> }
>
> my $total = 0;
> $total += $_ for @values;
> my $average = $total /@values;
>
> print "Average CPU Time for all servers in cpuatest.dat file is
> $average";
>
> All I need is an average figure of column 5.
I would write it something like this:
use strict;
use warnings;
my $file = $ARGV[ 0 ] || 'pickcpua.dat';
open my $CPUFILE, '<', $file or die "Unable to open '$file' $!";
my ( $total, $count );
while ( <$CPUFILE> ) {
next unless /
^
(?: Mon | Tue | Wed | Thu | Fri | Sat | Sun )
\s+
(?: Jan | Feb | Mar | Apr | May | Jun |
Jul | Aug | Sep | Oct | Nov | Dec )
\s+
\d\d
\s+
\d\d : \d\d : \d\d
\s+
( \d+ )
/x;
$total += $1;
$count++;
}
my $average = $total / $count;
print "Average CPU Time for all servers in $file file is $average\n";
__END__
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/