我有一些由前端应用程序在Unix服务器中记录的日志文件。这些文件包含所有日志记录语句,这些语句以时间戳值开头,后跟日志记录文本。以下示例显示了如何在这些文件中完成日志记录的示例:
02 07:31:05.578记录文本........(我在这里加粗时间戳,因为我将使用它来解释下面的这个时间戳记表示法)
02 07:31:05.579记录文本........
02 07:31:05.590记录文本........
02 07:31:05.591记录文本........
02 07:31:05.593记录文本........
时间戳值解释 -
02:日期值(如果日期是7月02日,则值为02)
07:小时
31:分钟
05:秒
578:毫秒
注意:如果您正在寻找'YYYY'即年字段,请忽略。为简单起见,请仅遵循以上格式。
我必须实现:我必须在给定文件中找出那些确切的两个连续时间戳,它们与给定文件中的所有其他连续时间戳对之间具有最大差异。
示例:如果您看到上面的记录文本示例,您将看到上面样本中唯一一对具有最大差异的连续时间戳是02 07:31:05.579和02 07:31:05.590
我正在寻找一个shell脚本,我可以在所需的文件上运行,并将输出作为两个具有最大差异的连续时间戳。
为什么我需要它:在日志记录语句之间存在巨大差异的情况下,我需要监视许多此类日志文件。这可能有助于我找出像SQL查询等待很长时间因为锁而发生事务,API请求没有从目标获取响应等情况。
如果任何人也可以分享此问题的任何其他帖子或任何其他有用的有效方式。
谢谢大家阅读和抽出时间。如果需要更多信息,请告诉我。
你可以做的是用awk
命令编写一个脚本。您可以在这里找到有关如何使用awk
转换日期的示例:Converting dates in AWK。
这将帮助您解析文件,并在每行的开头添加2列:
然后你必须使用第二列对生成的文件进行排序,然后就完成了。
当然,如果我为你编写脚本会很容易(而且我很多时候都没有)。因此,您必须自己尝试上述内容,然后回过头来回答具体问题。在这里,你的问题与on topic questions of SO相比过于宽泛。
我建议通过这些行,将每个时间戳转换为UNIX纪元时间(自1970-01-01以来的秒数,date
可以执行此操作)。不幸的是,你缺少月份和年份,但也许你可以假设当前的月份和年份;除了月份边界,这应该给出正确的距离结果。
然后我会再次给出每一行,它的时间戳与前一行的差异。所以出来了
02 07:31:05.579 logging text........
02 07:31:05.590 logging text........
02 07:31:05.591 logging text........
02 07:31:05.593 logging text........
我愿意
0.000 02 07:31:05.579 logging text........
0.011 02 07:31:05.590 logging text........
0.001 02 07:31:05.591 logging text........
0.002 02 07:31:05.593 logging text........
然后你可以简单地sort -g
这个新的输出,以排序它的前任行之间的时间。最后一行是具有最大时间戳差异的行。