我想在句子之间提取数据并将其发送到文件

时间:2015-01-22 13:22:42

标签: bash perl

我有一个以语句开​​头的时间日志文件:

N:5,Image: 320 420,SF:2 

然后..

0.192
9.1829
879.08

......然后

N:100, Image 640 480 sf2
0.98
56.973
230.988

每次都会增加N的值。

我想将时间(浮点数)提取到N = 5然后N = 10

的文件中

这是我写的代码

use strict;

use warnings;

#open(FH, "out_put/Time_log1.txt");

#    my $line =<FH>;

#    my @b =<FH>;

#    foreach my $line (@b)

 #   {

 #   perl -i.bak -ne print unless /\N:5/\b(.*?)/\bN:10\b/ 

 #   print $line >Time_log;

#}
open(FIL, "out_put/Time_log1.txt");

my $sum = 0;

my $count = 0;

my $avg =0;

foreach( <FIL> ) {chomp; $sum += $_;$count++;}

$avg=$sum/$count;

close(FIL);

print "Sum = $sum\n";

print "avg is = $avg\n";

1 个答案:

答案 0 :(得分:1)

好的,所以考虑到你正在尝试做的事情 - 看起来你正在按照N&#39; N&#39;行:

use strict;
use warnings;

my %n_values;
my %n_count;
my $current_n = 0;

while (<DATA>) {
    chomp;
    if (m/\AN:\d+/) {
        ($current_n) = (m/\AN:(\d+)/);
    }

    my ($value) = (m/([\d\.]+)/);
    if ( defined $value ) {
        $n_values{$current_n} += $value;
        $n_count{$current_n}++;
    }
}

foreach my $n ( keys %n_values ) {
    print "N: $n value: $n_values{$n}\n";
}

__DATA__
N:5,Image: 320 420,SF:2 
0.192
9.1829
879.08
N:100, Image 640 480 sf2
0.98
56.973
230.988

这将循环浏览DATA的内容,一次读取一行,并在每次看到从$current_n开始的行时设置N:。只要有值要添加,就会为$current_n更新哈希值。

哪个应该可以解决问题,尽管它在错误检查方面做的不多,例如文件中的值无效。