2015-04-29 16 views
0

我運行一些網絡測量,我現在根據這幅畫獲得一噸的時間戳列多個文本文件: http://i.stack.imgur.com/TNnBf.png如何閱讀充滿了計算統計perl的

我想要得到平均的統計, Var & CoV和我遇到的問題是我真的不知道如何讀取文本文件,以便在正確的數組中找到正確的值。

我看到巴什被認爲是這方面的不佳,所以我決定,Perl的應該會更好。這是我迄今的嘗試:

#!/usr/bin/perl 

#foreach $line 

$pkt_number = $1; 
$pkt_arrival = $2; 
$pkt_size = $6; 

$nr_of_pkg    = 16; 
$linespeed    = 100000; 
$sum_of_throughput  = 0; 
$throughput    = 0; 
$sum_of_throughputsquared = 0; 
$mean      = 0; 
$var      = 0; 
$co_v      = 0; 

$duration = $pkt_arrival[0] - $pkt_arrival[15]; 

for (my $i = 0 ; $nr_of_pkg > $pkt_number[i] ; $i++) { 
    $throughput[i]    = $packet_size[i]/$pkt_arrival[i]; 
    $sum_of_throughput   = $sum_of_throughput + $throughput[i]; 
    $sum_of_throughput_squared = $sum_of_throughput_squared + $throughput[i] * $throughput[i]; 
} 

$mean = $sum_of_throughput/$nr_of_pkg; 
$var = (($sum_of_throughput * $sum_of_throughput) - $sum_of_throughput_squared); 
$co_v = sqrt($var) 
+0

什麼是你的問題? – Max

+0

如何做到這一點,我花了相當一段時間,這是我到目前爲止。 I.E.我需要一些指導。 – ricksson

+0

在我理解它之前,必須清理你的Perl代碼是很煩人的。請嘗試正確地呈現您的代碼,特別是如果您要求幫助。您還應該爲全局標識符保留大寫字母,例如包名稱。詞彙標識符只能包含小寫字母,十進制數字和下劃線 – Borodin

回答

0

這是讀取和解析文本文件的代碼。

my @pkt_number; 
my @pkt_arrival; 
my @pkt_size; 

my $i = 0; 
my $line; 
while (<>) { 
    $line = " $_"; # make sure it always start with a whitespace 
    chomp $line; 
    ($pkt_number[$i], $pkt_arrival[$i], $pkt_size[$i]) 
     = (split(/\s+/, $line, 8))[ 1, 2, 6 ]; 
    printf "[%s]\n", join("/", $pkt_number[$i], $pkt_arrival[$i], $pkt_size[$i]); 
    $i++; 
} 

這就是你如何在Linux上運行它:

% cat result.txt | ./your_perl.pl 
+0

感謝@tivn這是我是我是問了,還沒有測試它尚未,但似乎合法的! – ricksson