2015-04-29 2 views
0

Я бег некоторых измерений сети, где я теперь получить тонну меток времени, по этой картине: http://i.stack.imgur.com/TNnBf.pngКак читать несколько текстового файл, заполненного столбцы счетных статистики PERL

Я хочу, чтобы получить статистику Mean, 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

Как добиться этого, я потратил на это некоторое время, и это то, что я получил до сих пор. И.Е. Мне нужно какое-то руководство. – 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

Смежные вопросы