regex – 如何使用Perl在两个时间戳之间的文件中搜索行?
发布时间:2020-12-16 06:24:53 所属栏目:大数据 来源:网络整理
导读:在Perl中,我试图读取一个日志文件,并且只打印具有两个特定时间之间的时间戳的行.时间格式为hh:mm:ss,这始终是每个日志的第三个值.例如,我会搜索在12:52:33到12:59:33之间的行 我是Perl的新手,并且不知道采取哪条路线来开始编程.我很确定这会使用某种类型的
在Perl中,我试图读取一个日志文件,并且只打印具有两个特定时间之间的时间戳的行.时间格式为hh:mm:ss,这始终是每个日志的第三个值.例如,我会搜索在12:52:33到12:59:33之间的行
我是Perl的新手,并且不知道采取哪条路线来开始编程.我很确定这会使用某种类型的正则表达式,但对于我的生活,我甚至无法理解那将是什么.有人可以帮助我这个. 另外,为了使这更加困难,我必须使用核心Perl模块执行此操作,因为我的公司不允许我使用任何其他模块,直到它们经过测试和验证,对脚本可能没有任何系统的不良影响与…相互作用. 解决方法
在伪代码中,你会做这样的事情:
>逐行读入文件: >解析此行的时间戳. 这可能对您的需求来说太高级了,但是flip-flop operator …会立即浮现在脑海中,因为这里有用. 对于从stdin读取文件,这是传统模式: while (my $line = <>) { # do stuff... } 通过拆分可以轻松地将一条线解析为字段(参见perldoc -f split).您可能需要按标签或空格分割线条,具体取决于格式. 获得特定字段(包含时间戳)后,可以使用自定义的正则表达式检查它.阅读有关perldoc perlre的内容. 这可能会让你更接近: use strict; use warnings; use POSIX 'mktime'; my $starttime = mktime(33,52,12); my $endtime = mktime(33,59,12); while (my $line = <>) { # split into fields using whitespace as the delimiter my @fields = split(/s+/,$line); # the timestamp is the 3rd field my $timestamp = $fields[2]; my ($hour,$min,$sec) = split(':',$timestamp); my $time = mktime($sec,$hour); next unless ($time < $starttime) .. ($time > $endtime); print $line; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |