我有一个以语句开头的时间日志文件:
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";
答案 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
更新哈希值。
哪个应该可以解决问题,尽管它在错误检查方面做的不多,例如文件中的值无效。