搜索日志文件以获取 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]
从a
到z
[5-8]
从5
到8
@987654329 @ 从 000
到 999
([0-9]|[1-9][0-9]|[1-9][0-9][0-9])
这将从 0
到 999
等等
【讨论】:
也许[0-9]3
和 [0-9]1,3
用于最后 2 个建议的正则表达式?还是引入新的正则表达式概念会打断您的课程流程?
@Miller 对于大多数gnu awk
,您需要添加--re-interval
才能使用此选项。 [0-9]1,3
会给出类似08
和003
的数字,而不是8
和3
。这可能会也可能不会,取决于输入数据。
是的,没错,我建议的第二个正则表达式不会限制 0 前缀的大小写。但是您的原始正则表达式也没有限制,因此可以轻松地将 00009
作为匹配值。我想我们可以将其扩展为\b(?:(?=0\b)|(?!0))[0-9]1,3\b
,但是我们肯定已经偏离了你原来的课程。 :)
@Miller 你是对的。使用正则表达式时,边界很重要。以上是关于搜索日志文件以获取 2 个纪元时间之间的条目范围的主要内容,如果未能解决你的问题,请参考以下文章
范围 COUNT 查询基于 Hibernate 中纪元时间戳的 DATE
Perl:从考虑夏令时的纪元开始以秒为单位输入时间时,获取 gmtime 和本地时间之间的偏移量