2015-04-29 18 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