- 论坛徽章:
- 0
|
要用perl实现如下功能
实时跟踪某一日志文件, 当文件中有符合标准的纪录出现, 将其按照固定格式转化成容易阅读的方式打印在屏幕上
当我用"tail -f $filename |"作为管道的输入时, 发现并不是所有符合标准的纪录都会被打印出来, 尤其是有连续多条符合标准的纪录同时出现时
以下是程序的简化版, 猜测是tail -f 的缓存的问题, 但没有头绪如何解决, 求高手指点,谢谢
#!/usr/bin/perl -w
use strict;
sub print_bps($)
{
my $filename=shift;
open(PHANDLE,"tail -f $filename |" ||die "Can not open pipe for reading:!$\n";
while(< HANDLE>
{
my $bps_log=< HANDLE>;
if($bps_log=~/TCHMQTransport\:\sReceived\sUpStream\stransport\sMQ\sMessage\s\=DATA/)
{
my @BPS_tmp=split(/=/,$bps_log);
my $len=$BPS_tmp[1];
chomp($len);
if(length($len)==2060)
{
print "$len\n";
}
elsif(length($len)==2260)
{
print "$len\n";
}
}
}
close(PHANDLE)||warn "pipe to more failed: !$\n";
}
if($#ARGV!=0)
{
die ("Usage: parse_bps.pl filename\n e.g parse_bps.pl BPS.log\n" ;
}
else
{
print_bps($ARGV[0]);
} |
|