Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex awk是在日志文件中搜索日期/时间范围的最快方法吗?_Regex_Linux_Bash_Performance_Awk - Fatal编程技术网

Regex awk是在日志文件中搜索日期/时间范围的最快方法吗?

Regex awk是在日志文件中搜索日期/时间范围的最快方法吗?,regex,linux,bash,performance,awk,Regex,Linux,Bash,Performance,Awk,我正在尝试创建一个脚本,用于搜索日志文件中某个时间/日期范围内发生的日志行 我尝试使用此页面中的解决方案: 这个解决方案工作得很好,但需要一点时间才能完成。是否有其他方法可以更快地执行此搜索?我并不是对这种情况下的速度感到强迫症,只是我正在搜索一些系统日志文件,每个文件都包含几GB的数据,所以如果我能从搜索中节省一些时间,那就太棒了。Grep和regex出现在我的脑海中,但我不确定这是否会有那么大的不同 以下是日志文件中使用的日志格式: 2014-12-31T23:59:33-05:00设备日

我正在尝试创建一个脚本,用于搜索日志文件中某个时间/日期范围内发生的日志行

我尝试使用此页面中的解决方案:

这个解决方案工作得很好,但需要一点时间才能完成。是否有其他方法可以更快地执行此搜索?我并不是对这种情况下的速度感到强迫症,只是我正在搜索一些系统日志文件,每个文件都包含几GB的数据,所以如果我能从搜索中节省一些时间,那就太棒了。Grep和regex出现在我的脑海中,但我不确定这是否会有那么大的不同

以下是日志文件中使用的日志格式:


2014-12-31T23:59:33-05:00设备日志数据

fgrep没有regex的日期可能会更快


如果您真的在搜索性能优化的解决方案,那么就忘记了处理整个日志文件的工具。我希望日志文件是按时间排序的,所以您不需要扫描整个文件。您可以编写一个简单的脚本/程序,并实现二分法来查找时间间隔边界,然后打印中间的所有内容。

行已排序,因此您可以使用该命令。它应该比
awk
grep
快得多,因为它使用二进制搜索。

实际上,如果使用日志聚合(从不同的机器收集),则时间戳不一定按排序顺序排列。即使使用NTP.True,也可能无法避免扫描整个文件,这似乎是一项磁盘绑定任务,在这种情况下,grep、awk或其他东西并不重要。也许把文件整理一下?(如果它们被多次搜索),但我不知道这是否适用于千兆字节的文件,谢谢!我最初的印象是日志行是有序的,但由于某些原因它们不是有序的(随机行是无序的,将不得不询问某人,因为我不管理日志服务器)。最后,我发现最快的解决方案是对我想要的设备进行grepping,然后在之后检索特定的时间范围(以减少awk需要做的工作)。我在每一行使用awk使用mktime,以便在不存在特定时间戳的情况下避免出现问题,但在对整个日志文件运行它时,这需要相当长的时间。