我有一个日志,它同时被一个或多个进程转储。 有时,由于CPU过载和上下文切换,将记录到此文件 延迟。我想找到每一行之间的时差并在每一行之前打印它?
日志示例:
07/18 16:20:29886564 Pid= 2998,Tid= 3036, XXXXX.c: 335:XXXXX:### xxxxxxxxxxxxxxxxxx ###
07/18 16:20:29886642 Pid= 2998,Tid= 3036, XXXXX.c: 484:XXXXX:### yyyyyyyyyyyyyyy()
07/18 16:20:29886880 Pid= 2998,Tid= 3036, XXXXX.c: 488:XXXXX:>>>yyyyyyyyyyyyy()
07/18 16:20:29887002 Pid= 2998,Tid= 3036, XXXXX.c: 494:XXXXX:>>>OK: zzzzzzzzzzzzzzz()
我想这可能是'awk'。但是,我对linux命令非常糟糕。 有人可以帮忙吗?
答案 0 :(得分:2)
您可以尝试以下awk
命令。我已经对它进行了评论,因此您可以了解它是如何工作的:
awk '{
# split the time field
split($2,arr,":");
# convert hours and mins into seconds and compute total
curr=arr[3]+arr[2]*60+arr[1]*60*60;
# set previous value for the first line
if(prev == 0) prev=curr;
# print out the difference between current and previous totals
print curr-prev,$0;
# set previous to current
prev=curr;
}' file