awk / bash比较时间戳和跨行排序时间差

问题描述 投票:1回答:2

我有这样的日志文件:

2019-10-15 13:35:46.823 INFO : xxx
2019-10-15 13:35:46.886 INFO : yyy
2019-10-15 13:35:46.943 INFO : zzz
2019-10-15 13:35:47.822 INFO : aaa
2019-10-15 13:35:48.824 INFO : bbb

我需要找出连续行的时间戳之间的时间差(以毫秒为单位,并按时间差排序(忽略第一行)]

 2019-10-15 13:35:46.823 1571117746823
 2019-10-15 13:35:48.824 1002
 2019-10-15 13:35:47.822 879
 2019-10-15 13:35:46.886 63
 2019-10-15 13:35:46.943 57

我能够通过编写bash脚本来做到这一点,例如]

lastEpoch=0
while read p; do
  logTime=$(echo $p | cut -c1-24)
  currentEpoch=$(date -d "$logTime" +%s%3N)
  log="$log $logTime$((currentEpoch-$lastEpoch))"$'\n'
  lastEpoch=$currentEpoch  
done < my.log
echo -e "$log" > tmp.log
sort -nrk3 tmp.log

但是运行脚本需要很长时间,因为我的原始日志文件有1M行,我想我没有使用最有效的方法来执行此操作

我认为awk可以有效地做到这一点,但是我对awk还是陌生的,有人可以给我提示如何在awk上做到这一点吗?还是有更有效的方法?

我有这样的日志文件:2019-10-15 13:35:46.823 INFO:xxx 2019-10-15 13:35:46.886 INFO:yyy 2019-10-15 13:35:46.943 INFO:zzz 2019 -10-15 13:35:47.822信息:aaa 2019-10-15 13:35:48.824信息:...

linux bash shell awk
2个回答
1
投票

您可以使用bash进行操作,并使用while read循环和date转换日期,将日期转换为秒,然后从以前的值中减去并打印。但是,正如您发现的那样,每行调用date的速度非常非常慢。


0
投票

您能不能尝试以下操作。

© www.soinside.com 2019 - 2024. All rights reserved.