gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:58:43 25 4
gpt4 key购买 nike

我有一个这样的日志文件:

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 上做到这一点的提示吗?或者有没有更有效的方法?

最佳答案

你能不能试试以下。

awk -F' INFO|: ' '
{
split($1,array,"[- :.]")
current=mktime(array[1] " " array[2] " " array[3] " " array[4] " " array[5] " " array[6]) * 1000 + array[7]
print $1,$2,current-prev
prev=current
}
' Input_file | sort -r -nk3

关于linux - awk/bash 比较时间戳和跨行排序时间差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59668199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com