我有这样的日志文件:
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信息:...
您可以使用bash进行操作,并使用while read
循环和date
转换日期,将日期转换为秒,然后从以前的值中减去并打印。但是,正如您发现的那样,每行调用date
的速度非常非常慢。
您能不能尝试以下操作。