2013-07-22 65 views
1

我有一个日志,它可以同时被一个或多个进程转储。 有时,由于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

什么样的时间格式是'16:20:29886564'? – dogbane

+0

这是HH:MM:SSXYZ –

回答

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 
+0

非常感谢你! –