2014-11-21 25 views
1

包含以下數據的日誌文件。格式化一個單詞並從日誌文件中查找不同時間的計數

2014-10-19 17:30:25: 
Creating destination directory: "\master1\users\jamesk\Java\chapter05\tech-support-complete\doc\" 
Loading source file Error \\master1\users\jamesk\Java\chapter05\tech-support-complete\JamesKohout.java... 
onstructing Javadoc information...Error 
31 Error Standard Doclet version 1.6.0_26 Error 
-encoding Error 
19 windows-1252 
20 -charset Error 
21 windows-1252 
22 -docletpath 
2014-10-19 18:30:25: 
Creating destination directory: "\master1\users\jamesk\Java\chapter05\tech-support-complete\doc\" 
Loading source file Error \\master1\users\jamesk\Java\chapter05\tech-support-complete\JamesKohout.java... 
onstructing Javadoc Error information... 
31 Standard Doclet version 1.6.0_26 Error 
-encoding Error 
19 windows-1252 
20 -charset Error 
21 windows-1252 
22 -docletpath 
2014-10-19 19:30:25: 
Creating destination directory: "\master1\users\jamesk\Java\chapter05\tech-support-complete\doc\" 
Loading source file Error \\master1\users\jamesk\Java\chapter05\tech-support-complete\JamesKohout.java... 
onstructing Javadoc information...Error 
31 Standard Doclet version 1.6.0_26 Error 
-encoding 
19 windows-1252 
20 -charset Error 
21 windows-1252 
22 -docletpath 
2014-10-19 20:30:25: 
Creating destination directory:Error "\master1\users\jamesk\Java\chapter05\tech-support-complete\doc\" 
Loading source file Error \\master1\users\jamesk\Java\chapter05\tech-support-complete\JamesKohout.java... 
onstructing Javadoc information... 
31 Standard Doclet version 1.6.0_26 Error 
-encoding Error 
19 windows-1252 
20 -charset Error 
21 windows-1252 Error 
22 Error -docletpath 

我想要寫的Unix /蟒蛇其裏grep字「錯誤」,並從上面在不同的時間日誌文件中發現了它的單詞計數腳本。 該文件包含不同時間間隔的數據。單詞錯誤在第一個時間間隔有一個計數6,第二個時間間隔的計數是5,依此類推。 我想要的輸出

2014-10-19 17:30:25:  Error Count=6 
2014-10-19 18:30:25:  Error Count=5 
2014-10-19 19:30:25:  Error Count=4 
2014-10-19 20:30:25:  Error Count=7 

我用下面的命令嘗試,但它只是給出了目前在整個文件中的總字數。

grep -i "Error" | wc -l 

請幫忙。 謝謝。

+0

所以您無法檢測的時間? – monkut 2014-11-21 06:39:36

+0

是的,我無法在diff時間單獨找到wordcount。 – Rohit 2014-11-21 06:48:23

+0

@Rohit檢查代碼 – Hackaholic 2014-11-21 06:58:54

回答

2
import re 
pattern=re.compile(r"\d{4}-\d{1,2}-\d{1,2}\s+\d{1,2}:\d{1,2}:\d{1,2}:|Error",re.IGNORECASE) 
ll=pattern.findall(x) 
d={} 
for x in ll: 
    if x!="Error": 
     d[x]=0 
     last=x 
    else: 
     d[last]=d[last]+1 
print d 

x是你的數據或file.read()。

+0

如果我是正確的,x是「」.join(file.readlines())。但是這個作品+ 1 – 2014-11-21 07:15:12

0

在這裏你去使用python:

>>> f = open('logfile').readlines() 
>>> i = 0 
>>> while True: 
...  if i+10 > len(f): 
...  break 
...  tmp = len(re.findall('Error',"".join(f[i+1:i+10]))) 
...  print f[i].strip() + " Error-Count=" + str(tmp) 
...  i +=10 
... 
2014-10-19 17:30:25: Error-Count=6 
2014-10-19 18:30:25: Error-Count=5 
2014-10-19 19:30:25: Error-Count=4 
2014-10-19 20:30:25: Error-Count=7 
+0

如果時間戳之間的行數不同,該怎麼辦? – 2014-11-21 07:10:21

+0

然後它不會工作:),如在預期輸入其常量 – Hackaholic 2014-11-21 07:16:02

2

Awk簡單的工作。

awk '/^[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9] [012][0-9]:[0-5][0-9]:[0-6][0-9]:/ { 
     t=$0 } 
    /Error/ { ++e[t] } 
    END { for (s in e) print s "Error-Count=" e[s] }' logfile 
+0

awk是一種美麗的語言。 – pfnuesel 2014-11-21 08:38:28

1

直接awk

awk '/^201[0-9].*:/{if (cont){print cont}cont=0;printf $0}/Error/{cont+=1}END{print cont}' infile 

解釋code

awk '/^201[0-9].*:/{ # Timestamp pattern reached 
        if (cont){ 
           print cont # print previus timestamp 
          }   # counter if exists and not zero 
        cont=0 # initialize actual timestamp counter 
        printf $0 
        } # print timestamp WITHOUT linebreak 
      /Error/{ # Error patter reached 
        cont+=1 # Aaccumulated count 
        } 
    END{ 
     print cont # print remainder counter 
     }' infile 
+0

照顧一些解釋,如果你不介意的話。 – 2014-11-21 08:38:23

+0

打印任何以前的「cont」值,打印時間戳,開始將錯誤計數收集到「cont」(這應該是「count」?) – tripleee 2014-11-21 08:45:36

+0

就是這樣@ tripleee;) – klashxx 2014-11-21 08:49:51

相關問題