У меня есть такой файл журнала:
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 ..? или есть более эффективный способ?