【问题标题】:Searching for a string a LARGE log-files在 LARGE 日志文件中搜索字符串
【发布时间】:2015-04-10 05:34:52
【问题描述】:

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

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

在这种情况下我该怎么办?

【问题讨论】:

  • 也许只是解析日志文件,将您需要的数据存储在数据库中并索引您要搜索的列。 grep 非常适合一次性或小型文本文件。也许也可以看看kibanalogstash。如果您将定期解析和索引它们,那么您正在交易一些磁盘空间(用于索引)和更新索引所需的时间(少量时间),作为回报,您可以获得非常快速的搜索查询。作为旁注,我认为这个问题不一定与 Perl 有关。
  • File::Tail perl 模块怎么样 - 您不需要每 5 分钟重新读取一次文件,但您可以在事件到达时对其进行解析。

标签: string perl unix grep


【解决方案1】:

如果短语只有一行,那就简单了。只需逐行阅读文件并测试每一行的正则表达式,直到找到它。 类似的东西:

open(F, '<FILENAME>') or die "can't open file : $!";
while (my $line = <F>) {
    if ($line =~ /<MYREGEXP>/) {
        // regexp found
    }
}

【讨论】:

    【解决方案2】:

    使用GNU parallel(请参阅the parallel grep example)将输入分成多个块,并尝试--jobs--load--nice 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-11
      • 2011-11-19
      • 1970-01-01
      • 2017-09-10
      • 2020-01-02
      • 2020-08-14
      • 2018-08-12
      • 1970-01-01
      相关资源
      最近更新 更多