-1

私はこのようなファイルを持っています

[
MsgName:XYZ
Status:Pass
]

[
MsgName:ABC
Status:Pass
]

[
MsgName:bbb
Status:Fail
Error
]

[
MsgName:ttt
Status:Pass
]

ここで、このファイルを読み取り、2 つのログ ファイルを作成します。1 つはすべてのデータを含む通常のログで、もう 1 つはエラーのみを含むデータを含むエラー ログです。

したがって、この場合、エラー ログは

[

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 に答える