2011-11-22 40 views
2

我仍然在这里。 ;) 我从一个非常专业的人得到了这段代码,我很害羞地问他这个基本的问题......无论如何,这是我现在的问题;这个Perl脚本打印出一列数字分隔空间的中位数,并且我添加了一些东西来获取它的大小,现在我试图获得同一列的总和。我做了没有结果,我没有采取正确的列? ./stats.pl 1 columns.txt
#!的/ usr/bin中/ perl的从一个脚本文件计算平均值

use strict; 
use warnings; 

my $index = shift; 
my $filename = shift; 
my $columns = []; 

open (my $fh, "<", $filename) or die "Unable to open $filename for reading\n"; 

for my $row (<$fh>) { 

my @vals = split/\s+/, $row; 
push @{$columns->[$_]}, $vals[$_] for 0 .. $#vals; 
} 

close $fh; 

my @column = sort {$a <=> $b} @{$columns->[$index]}; 

my $offset = int($#column/2); 
my $length = 2 - @column % 2; 

my @medians = splice(@column, $offset, $length); 

my $median; 
$median += $_ for @medians; 
$median /= @medians; 

print "MEDIAN = $median\n"; 
################################################ 
my @elements = @{$columns->[$index]}; 
my $size = @elements; 
print "SIZE = $size\n"; 
exit 0; 
################################################# 
my $sum = @{$columns->[$index]}; 
for (my $size=0; $size < $sum; $size++) { 
my $mean = $sum/$size; 
}; 
print "$mean\n"; 

在此先感谢。

+0

你能张贴一行吗? – FailedDev

+0

赦免?你是指我的文件中的数字行吗? – Dav1

+0

是一条线。 – FailedDev

回答

0

OK了一些三分球,让你去:

你可以把所有的数字到一个数组:

my @result = split(m/\d+/, $line); 
#average 
use List::Util qw(sum); 
my $sum = sum(@result); 

然后,您可以用$result[$index]访问各列其中index是你想要的列的数量访问。

还要注意的是:

$total = $line + $total; 
$count = $count + 1; 

可以改写为:

$total += $line; 
$count += 1; 

最后确保你正在阅读的文件:

挂上了 “调试” 打印到时loop:

print $line, "\n"; 

这应该让你去:)

+0

非常感谢你!我要去尝试一下。 – Dav1

+0

@ Dav1不客气。 Perl是一个很好的工具! :) – FailedDev

+0

你能否请你重写我的脚本与你的建议,我是新的Perl和有很多问题的语法。 – Dav1