搜索日志文件以获取 2 个纪元时间之间的条目范围

Posted

技术标签:

【中文标题】搜索日志文件以获取 2 个纪元时间之间的条目范围【英文标题】:Search log file for entry range between 2 epoch times 【发布时间】:2014-10-18 04:24:12 【问题描述】:

我正在使用awk 在日志文件中搜索两个时期之间的行列表。 这就是我所做的……(我得到了大量的条目)

awk '/([1480360000..1480380000])/' /Location/Data.txt

我还希望能够用 Perl 变量替换时间,而不必使用 [0-9][0-9] 并在 perl 脚本中使用它。我很困惑。

system(awk '/([$MinRange..$MaxRange])/' /Location/Data.txt)

谢谢

【问题讨论】:

您误解了正则表达式中括号的使用。它需要更像awk '$1 >= 1480360000 && $1 <= 1480380000' file。只需将1 更改为正确的字段编号即可。 你是正确的。我现在有了更好的理解。谢谢老兄。 【参考方案1】:

这只是根据ooags评论给出答案。

从一个数字搜索到一个数字:

cat file
1 one
2 two
3 thee
4 four
5 five
6 six
7 seven
8 eight
9 nine
10 ten

awk '$1>=4 && $1<=8' file
4 four
5 five
6 six
7 seven
8 eight

括号用于从单个字母或单个数字中获取。[a-z]az[5-8]58@987654329 @ 从 000999([0-9]|[1-9][0-9]|[1-9][0-9][0-9]) 这将从 0999 等等

【讨论】:

也许 [0-9]3[0-9]1,3 用于最后 2 个建议的正则表达式?还是引入新的正则表达式概念会打断您的课程流程? @Miller 对于大多数gnu awk,您需要添加--re-interval 才能使用此选项。 [0-9]1,3 会给出类似08003 的数字,而不是83。这可能会也可能不会,取决于输入数据。 是的,没错,我建议的第二个正则表达式不会限制 0 前缀的大小写。但是您的原始正则表达式也没有限制,因此可以轻松地将 00009 作为匹配值。我想我们可以将其扩展为\b(?:(?=0\b)|(?!0))[0-9]1,3\b,但是我们肯定已经偏离了你原来的课程。 :) @Miller 你是对的。使用正则表达式时,边界很重要。

以上是关于搜索日志文件以获取 2 个纪元时间之间的条目范围的主要内容,如果未能解决你的问题,请参考以下文章

范围 COUNT 查询基于 Hibernate 中纪元时间戳的 DATE

根据日期范围过滤日志文件条目

从日志文件中搜索和分组

Perl:从考虑夏令时的纪元开始以秒为单位输入时间时,获取 gmtime 和本地时间之间的偏移量

使用 hadoop mapreduce 作业从日志文件分析时间范围内的总错误条目发生率

CakePHP 在 2 个日期记录之间搜索