我的文件看起来像这样
[
MsgName:XYZ
Status:Pass
]
[
MsgName:ABC
Status:Pass
]
[
MsgName:bbb
Status:Fail
Error
]
[
MsgName:ttt
Status:Pass
]
现在我想读取这个文件并创建2个日志文件 一个包含所有数据的常规LOG和包含仅包含错误的数据的其他错误日志
所以在这种情况下,错误日志应该只显示
[
MsgName:bbb
Status:Fail
Error
]
和regfular记录所有内容
任何人都可以指导我如何做到这一点
我试过这种方式
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用于错误日志
答案 0 :(得分:0)
最简单的方法是在遍历文件时以十五行存储您感兴趣的整个块。
#!/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)