I am trying to calculate column averages (excluding 0's) for all the columns in a CSV file except the first column. My input CSV file is as follows:
pickcpua.dat IMAGINGNY,1.45,0.42,1.54,1.49,1.47,1.36,1.81,0.47,1.8,0.55,0.38 JBSQLTST,1.29,1.09,1.13,1.88,1.11,1.44,1.25,1.23,1.05,1.39,1.61 SNYCSQL,4.58,4.24,3.87,3.9,4.13,2.04,3.34,7.6,3.58,1.26,7.45 Snynetsrv, 26,26.34,24.59,26.46,26.24,26.14,32.35,31.77,31.77,29.92,26.59 W32SPLMCOR01,8.27,13.23,7.73,8.85,9.15,13.95,0,0,0,0,0 W32SDAPSCT01,3.07,3.14,2.97,3.28,21.65,54.23,3.16,3.02,3.26,2.77,3.40 W32SDASALM01,1.22,1.3,1.11,0.92,1.57,1.06,1.01,0.87,0.93,2.26,0.91 W32SMSCSD02,15.38,12,22.32,23.3,19.74,46.42,2.06,1.7,2.17,2.85,1.74 W32SPLMCOR02,13.24,13.23,7.73,8.85,9.15,13.95,0,0,0,0,0 I have been able to calculate a column average for a particular column (excluding 0's) using the following perl code: #!/usr/bin/perl 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"; When trying to have perl calculate the column average(excluding 0's) for all columns excluding the first column, using the following perl code, perl is calculating the 2nd column's average 9 times rather than computing the column average for the 2nd through 10th column. The code is as follows: #!/usr/bin/perl use strict; use warnings; my $file = $ARGV[0] || 'pickcpua.dat'; open(my $CPUFILE, "<", $file) || die "Unable to open sorted file !"; my @values; my @colval; for($index=1; $index<10; $index++) { while (<$CPUFILE>) { chomp; my @col = split /,/; # Assume basic comma delimited if ($col[$index] > 0) { push @values, $col[$index]; # Column 2 is what we want push @colval, $col[$index]; # Column 2 is what we want } } ## End while loop my $total = 0; $total += $_ for @colval; print "Pass $index through data \n"; print "colval is @colval \n"; print "values is @values \n"; my $average = $total /@colval; print "Average CPU Time for Column for all servers in cpuatest.dat file is $average \n"; } ## End of initial $index for loop close $CPUFILE or die; I would appreciate it if someone could tell me what I am doing wrong in going from the calculation of one column's average to caalculating the column average for all columns other than the first column. I do not think I am using the for loop properly in this case -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/