2013-11-23 51 views
0

我試圖從小時數的一堆.gz日誌文件中計算特定字符串的出現次數。每個日誌文件的語句開頭以下時間格式:每小時從標準.gz日誌文件中提取和計數值

2013-11-21;09:07:23.433. 

例如,爲了更清楚,發現00-08:00之間串​​的出現到上午9點計數,然後上午9點至上午10點等。任何想法如何做到這一點?

回答

1

既然你只是想指望出現,你可以將文件,grep部分描述你要找的東西簡單地zcat內容 - 字/時間間隔 - ,最後排序/數(sort | uniq -c)條目。下面可能就足夠了:

zcat *.gz | grep <word> | grep -oP "^\d{4}-\d{2}-\d{2};\d{2}" | sort | uniq -c 

上面的命令會發現在你的日誌文件的線包含<word>你正在尋找,提取日期和時間,從這樣的條目,後來算髮生。 如果你不想考慮到天/月/年,您可以使用:

zcat *.gz | grep <word> | grep -oP "^\d{4}-\d{2}-\d{2};\K\d{2}" | sort | uniq -c 

\Kgrep表達增加是向後看的PCRE標誌 - perl正表達。

+0

完美。這就是我一直在尋找的感謝! – codehammer

+0

@Hiten很高興幫助!如果某個帖子回答了您的問題,請將其標記爲已接受,以便其他人知道問題已解決。爲此,請檢查投票箭頭正下方的刻度線。 – Rubens

+0

錯過了它..標誌着它被接受。再次感謝。 – codehammer

0

或者AWK(GAWK在Linux)將工作:

zcat *.gz | awk -F'[\.;:]' '{arr[$2]++} END{for(i in arr){print i, arr[i]} }' 2>/dev/null 

重定向是存在的,因爲一些awks,特別是呆子,會抱怨。不是元字符

1

試試這個:

zgrep -c '2013-11-21;0[89]:.*abc' file.gz