2011-11-22 174 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