需要过滤日志以搜索最近5分钟的行

ton*_*man 3 regex perl datetime logfiles

2011-04-13 00:09:07,731 INFO [STDOUT] 04/13 00:09:07信息......

嗨,大家好.我会发布一些代码,但我认为它不值得发布.我正在尝试做的是我有一个包含上述行的日志文件.我需要做的是采取最后一行时间戳,并保留最后5分钟的所有行(而不是最后200行或其他......更容易).有人可以帮忙吗?我在网上搜索了一些不错的提示,但仍然没有什么事情和沮丧的地狱.谢谢!

Jim*_*son 5

这是一个简单的Perl脚本,它遍历文件并打印每个行,其时间戳在执行开始时的5分钟内.为了提高效率,并假设行是按时间戳顺序排列的,您可以修改它以在遇到第一个可打印行时设置布尔标志并从该点开始跳过测试.

#!/usr/bin/perl
use POSIX qw(mktime);

$now = time();
while(<>)
{
    ($yy,$mm,$dd,$h,$m,$s,$t) = /^(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+),(\d+)/;
    $t = mktime($s+$t/1000, $m, $h, $dd, $mm-1, $yy-1900);
    print "$_" if ($t >= $now-300);
}
Run Code Online (Sandbox Code Playgroud)