如何从文件中捕获特定字符串并将其转储到perl中的diff文件中

时间:2013-07-25 14:10:11

标签: string perl parsing

我有一个日志文件,其中包含各种测试条件的结果。它看起来像

Starting TestCon1
Msg1:Criteria
Result:pass
Msg2:Criteria
Result:fail

Starting TestCon2
Msg1:Criteria
Result:fail
Msg2:Criteria
Result:pass

Starting TestCon3
Msg1:Criteria
Result:pass

我想创建一个子程序,它只选择与他们所属的TestCon一起失败的" Msg。这将被转储到显示 - >的摘要文件中。 失败的Msg,结果和它属于的TestCon

我不知道从哪里开始,任何人都可以告诉我从哪里开始

2 个答案:

答案 0 :(得分:0)

以下是一个起点:如果将$/(行分隔符)设置为空字符串(''""),则每次调用<>都会返回一个用空行分隔的块。所以,你可以这样写:

sub subroutine_for_user2486369 {
    open my $filehandle, '<', 'file_for_user2486369.txt'
        or die "Couldn't open file: $@";
    local $/ = '';
    while (<>) {
        # now $_ is one of your blocks
        ... # code to examine $_, see if it's what you want, and print
        ... # your result
    }
    close $filehandle;
}

答案 1 :(得分:0)

读取文件,使用正则表达式和变量。

#!/usr/bin/env perl
my $testcon;
my $msg;
while (<STDIN>)
{
    if (/^Starting (.+)$/) { $testcon = $1 }
    elsif (/^Msg(\d+:\s*.+)$/) { $msg = $1 }
    elsif (/^Result:\s*fail$/) { print "$testcon\t$msg\n" }
}