perl跳到循环中的特定行

时间:2018-12-06 11:11:20

标签: perl loops hash

我的日志文件结构如下:

Start Sollumsatz-Verrechnung 05.12.2018 03:42:51  
Verwende 20 Threads.
Anzahl gesamt     : 162360
Anzahl erfolgreich: 162360
Anzahl fehlerhaft : 0
Ende Sollumsatz-Verrechnung 05.12.2018 04:03:03 

我想将某些信息保存在哈希(%hash_ref)中。在“标志部分”中,我的代码跳至“ Verwende 20线程”行。但应跳至“ Anzahl erfolgreich”。你知道怎么做吗?

任何帮助将不胜感激。

my %hash_ref;
my %filter;
my ($act, $time,$flag);
while(my $line = <FILE>) {
    if ($line =~ /(.+? Sollumsatz-Verrechnung)\s+(\d\d.\d\d.\d\d\d\d \d\d:\d\d:\d\d)/) {
            ($act,$time) = ($1,$2);
            $flag = 1;
    }
    elsif ($line =~ /(.+? Deaktiviere PKonten)\s+(\d\d.\d\d.\d\d\d\d \d\d:\d\d:\d\d)/) {
            ($act,$time) = ($1,$2);
            $flag = 1;
    }
    elsif ($line =~ /(.+? PSK historisieren)\s+(\d\d.\d\d.\d\d\d\d \d\d:\d\d:\d\d)/) {
            ($act,$time) = ($1,$2);
            $flag = 1;
    }
    else {
                    if ($flag) {
                            print $line,"\n" # this outputs 'Verwende 20 Threads'
                            if ($line =~ /Anzahl erfolgreich:\s+(.+?)\s*$/) {
                                    #print $line, "\n";
                                    push @{ $hash_ref{$act}{'Anzahl'} }, $1;
                            }
                    }
                    $flag = 0;
    }
    if (! defined($filter{$act}{$time})) {
            push @{ $hash_ref{$act}{'time'} }, $time;
            $filter{$act}{$time} = 1;
    }

}

1 个答案:

答案 0 :(得分:0)

我实际上是通过以下方式解决了这个问题:

else {
       next if $line !~ /Anzahl erfolgreich/;
       if ($flag) {