String 在大型日志文件中搜索字符串

String 在大型日志文件中搜索字符串,string,perl,unix,grep,String,Perl,Unix,Grep,各位程序员好。 我需要一个日志文件问题的解决方案。 这是一个基于unix的环境。HP-UX。 有一个特定的目录,其中包含每天创建的日志文件,并根据需要附加消息和错误。 这些文件可以大到1GB的文本。 我需要找到一个特定的短语。 你建议我怎么做 系统人员建议我不要使用简单的GREP,因为它会在每5分钟一次的搜索期间导致高CPU使用率 在这种情况下我能做些什么?如果短语只在一行中,那么它很简单。只需逐行读取文件并在每行上测试regexp,直到找到它为止。 比如: open(F, '<FILEN

各位程序员好。 我需要一个日志文件问题的解决方案。 这是一个基于unix的环境。HP-UX。 有一个特定的目录,其中包含每天创建的日志文件,并根据需要附加消息和错误。 这些文件可以大到1GB的文本。 我需要找到一个特定的短语。 你建议我怎么做

系统人员建议我不要使用简单的GREP,因为它会在每5分钟一次的搜索期间导致高CPU使用率


在这种情况下我能做些什么?

如果短语只在一行中,那么它很简单。只需逐行读取文件并在每行上测试regexp,直到找到它为止。 比如:

open(F, '<FILENAME>') or die "can't open file : $!";
while (my $line = <F>) {
    if ($line =~ /<MYREGEXP>/) {
        // regexp found
    }
}
open(F',)或die“无法打开文件:$!”;
while(我的$line=){
如果($line=~//){
//找到regexp
}
}

使用(请参阅)将输入分块,并尝试使用
--jobs
--load
--nice
选项。

可能只需解析日志文件,将所需数据存储在数据库中,并为要搜索的列编制索引。grep是一次性或小型文本文件的理想选择。也许你也可以看看。如果你要周期性地对它们进行解析和索引,你就需要交换一些磁盘空间(用于索引)和更新索引所需的时间(一小段时间),而作为回报,你会得到非常快速的搜索查询。作为旁注,在我看来,这个问题不一定与Perl有关。
File::Tail
Perl模块怎么样?您不需要每隔5分钟重新读取一次文件,但可以在事件到达时解析事件。