在txt文件中搜索重复标记之间的字符串

时间:2013-04-08 07:47:36

标签: perl

在搜索重复标记之间的字符串时需要一些帮助 我有一个文本文件,其中以下格式在文件中重复多次

==========文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_1 START ==========

第1座 TC ID OK

第2座 输入部分确定 数据部分确定

第3组 输入部分确定 数据部分确定

第4座 输入部分确定 数据部分确定

==========文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_2 START ========

第1座 TC ID OK

第2座 输入部分确定

  • 行不匹配: 输出行:“从池分配的缓冲区:MIF_CTRL_POOL,buffer_id:1,大小(单词):4” 参考线:“pdcp_pdu_delete_count = 0,reset_cip_rdy = 1”
  • 行不匹配: 输出行:“pdcp_pdu_delete_count = 0,reset_cip_rdy = 1” 参考线:“ - MIF CTRL输出:---------------------------------------- ----------------------------------------“
  • 行不匹配: 输出行:“ - MIF CTRL输出:---------------------------------------- ----------------------------------------” 参考线:“mif_ctrl_rlc_am_um_reset_reestablish_ind_t.rlc_reset_reestablish_ind = 3(0x0003)”
  • 行不匹配: 输出行:“mif_ctrl_rlc_am_um_reset_reestablish_ind_t.rlc_reset_reestablish_ind = 3(0x0003)” 参考线:“从池中释放缓冲区:MIF_CTRL_POOL,buffer_id 0,大小(单词)6(使用5)”
  • 行数不匹配: 最后一行:“mif_ctrl_rlc_am_um_reset_reestablish_ind_t.rlc_reset_reestablish_ind = 3(0x0003)” 最后一行参考:“从池中释放缓冲区:MIF_CTRL_POOL,buffer_id 0,大小(单词)6(使用5)”

数据部分DIFFERS

第3组 输入部分确定 数据部分确定

第4座 输入部分确定 数据部分确定

==========文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_3 START ========

第1座 TC ID OK

第2座 输入部分确定 数据部分确定

第3组 输入部分确定 数据部分确定

第4座 输入部分确定 数据部分确定

**我需要找到Start标签之间是否存在“OK”以外的任何内容,如果是,我必须将特定块标记为失败

例如,如果我发现测试用例:Test_Case_1 START和测试用例之间没有OK:Test_Case_2 START我必须将测试用例:Test_Case_1标记为失败

已更新 这种格式的预期输出

文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_1状态:PASS (如果标签之间没有字符串'DIFFERS'(==)

文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_2状态:失败 (如果标签之间有字符串'DIFFERS'(==)

更新-2

如果测试用例失败

文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_2状态:FAILED

块的不同部分是:

第2区

输入部分确定

  • 行不匹配: 输出行:“从池分配的缓冲区:MIF_CTRL_POOL,buffer_id:1,大小(单词):4” 参考线:“pdcp_pdu_delete_count = 0,reset_cip_rdy = 1”
  • 行不匹配: 输出行:“pdcp_pdu_delete_count = 0,reset_cip_rdy = 1” 参考线:“ - MIF CTRL输出:---------------------------------------- ----------------------------------------“
  • 行不匹配: 输出行:“ - MIF CTRL输出:---------------------------------------- ----------------------------------------” 参考线:“mif_ctrl_rlc_am_um_reset_reestablish_ind_t.rlc_reset_reestablish_ind = 3(0x0003)”
  • 行不匹配: 输出行:“mif_ctrl_rlc_am_um_reset_reestablish_ind_t.rlc_reset_reestablish_ind = 3(0x0003)” 参考线:“从池中释放缓冲区:MIF_CTRL_POOL,buffer_id 0,大小(单词)6(使用5)”
  • 行数不匹配: 最后一行:“mif_ctrl_rlc_am_um_reset_reestablish_ind_t.rlc_reset_reestablish_ind = 3(0x0003)” 最后一行参考:“从池中释放缓冲区:MIF_CTRL_POOL,buffer_id 0,大小(单词)6(使用5)”

数据部分DIFFERS

2 个答案:

答案 0 :(得分:0)

疯狂猜测:

while(<>) {print '**FAIL**' unless /TC ID OK/;  print $_; }

但实际上,您应该指定您的要求。

答案 1 :(得分:0)

可能有些奇怪的事情如下:

#!/usr/bin/env perl

use strict;
use warnings;

my ($failed, $file, $test);
while (<>)
{
        chomp;
        next if /^$/;
        if (/^=/)
        {
                print "$file $test Status: $failed\n" if $failed;
                ($file, $test) = ($_ =~ /(File Name:\s+\S+).+\b(Test Case: Test_Case_\d+)\b/);
                $failed = 'PASSED';
                next;
        };
        $failed = 'FAILED' if /\bDIFFERS\b/g;
}
print "$file $test Status: $failed\n";

数据

$ cat testdata
========== File Name: fixed_am_7bitLI_HE10.txt Test Case: Test_Case_1 START ==========

Block 1 TC ID OK

Block 2 Input section OK data section OK

Block 3 Input section OK data section OK

Block 4 Input section OK data section OK

========== File Name: fixed_am_7bitLI_HE10.txt Test Case: Test_Case_2 START ========

Block 1 TC ID OK

Block 2 Input section OK data section DIFFERS

Block 3 Input section OK data section OK

Block 4 Input section OK data section OK

调用

$ ./t.pl < testdata
File Name: fixed_am_7bitLI_HE10.txt Test Case: Test_Case_1 Status: PASSED
File Name: fixed_am_7bitLI_HE10.txt Test Case: Test_Case_2 Status: FAILED