-1

我有一个文件看起来像这样

[
MsgName:XYZ
Status:Pass
]

[
MsgName:ABC
Status:Pass
]

[
MsgName:bbb
Status:Fail
Error
]

[
MsgName:ttt
Status:Pass
]

现在我想读取这个文件并创建 2 个日志文件一个包含所有数据的常规日志和另一个包含只有错误的数据的错误日志

所以在这种情况下,错误日志应该只显示

[

MsgName:bbb

Status:Fail

Error

]

并定期记录一切

谁能指导我如何做到这一点

我试过这种方式

while($line[i]=<FileHandle>
{

if($line[i]=~ /^s*\]/)
{
  print OUT "recd new msg-->:/n $line[i];
  next;
}
do

{
  print OUT "$line[i]";
  if($line[i]=~ /Error/)

{  ####this section i cannot figure out hw to frame it  get my desired output

   print "error found

   print ERROROUT .....

} until($line[i]=~ /^s\]

在这里,我使用 OUT 进行常规日志输出,使用 ERROROUT 进行错误日志

4

1 回答 1

0

最简单的技巧是在遍历文件时将您感兴趣的整个块存储在 fifo 中。

#!/usr/bin/perl 

use strict;
use warnings;

my @fifo=('') x 5; # Initialize an empty array with size = 5 (Message Block Size)
open(FILE,"log.txt");

while(<FILE>)
{
    push(@fifo,$_);       # Add element to the end of array making its size 6  
    shift @fifo;          # Remove first element reverting its size back to 5  
    if($fifo[3]=~/Error/) # Check if 4th line of block has error in it 
    {
        print @fifo;
    }
}
close(FILE)
于 2013-06-21T15:47:29.350 回答