gpt4 book ai didi

perl - 如何打印特定时间后发生的日志文件中的行

转载 作者:行者123 更新时间:2023-12-01 01:57:24 25 4
gpt4 key购买 nike

我想打印所有可以说在其值由 localtime 返回的时间之后发生的行perl 的功能里面perl脚本。我试过如下:

my $timestamp = localtime();
open(CMD,'-|','cat xyz.log | grep -A1000 \$timestamp' || die ('Could not open');
while (defined(my $line=<CMD>)){
print $line;
}

如果我更换 $timestampcat来自 xyz.log 的带有实际时间分量的命令然后它打印行但不打印 $timestamp多变的。

有没有其他方法可以打印日志文件中当前时间之后发生的行,或者如何改进上述命令?

最佳答案

您的 $timestamp永远不会在 Perl 中求值,因为它只出现在单引号中。但是为什么要使用shell来匹配字符串并处理文件呢? Perl 在这方面要好得多。

这里先是直接的方法,然后是基本的方法。第二个示例中显示了完整的脚本。

阅读文件直到到达模式行,然后退出循环。下次访问该文件句柄时,您将在下一行开始打印,在另一个循环中。

while (<$fh>) { last if /$timestamp/ }

print while <$fh>;

这将打印出文件的一部分,从具有 $timestamp 的行之后的行开始。它的任何地方。如果更具体,请调整如何准确匹配时间戳。

或者 -- 当一行与时间戳匹配时设置一个标志,如果设置了标志,则打印。
use warnings 'all';
use strict;

my $timestamp = localtime();

my $logile = 'xyz.log';
open my $fh, '<', $logfile or die "Can't open $logfile: $!";

my $mark = 0;
while (<$fh>)
{
if (not $mark) {
$mark = 1 if /$timestamp/;
}
else { print }
}
close $fh;

关于perl - 如何打印特定时间后发生的日志文件中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39404290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com