首页 > 解决方案 > perl 跳转到循环中的特定行

问题描述

我有这样的日志文件结构:

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 Threads”行。但它应该跳转到“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;
    }

}

标签: perlloopshash

解决方案


我实际上通过这个解决了这个问题:

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

推荐阅读