2013-07-22 67 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

非常感謝你! –