我試圖從小時數的一堆.gz
日誌文件中計算特定字符串的出現次數。每個日誌文件的語句開頭以下時間格式:每小時從標準.gz日誌文件中提取和計數值
2013-11-21;09:07:23.433.
例如,爲了更清楚,發現00-08:00之間串的出現到上午9點計數,然後上午9點至上午10點等。任何想法如何做到這一點?
我試圖從小時數的一堆.gz
日誌文件中計算特定字符串的出現次數。每個日誌文件的語句開頭以下時間格式:每小時從標準.gz日誌文件中提取和計數值
2013-11-21;09:07:23.433.
例如,爲了更清楚,發現00-08:00之間串的出現到上午9點計數,然後上午9點至上午10點等。任何想法如何做到這一點?
既然你只是想指望出現,你可以將文件,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
的\K
在grep
表達增加是向後看的PCRE標誌 - perl正表達。
或者AWK(GAWK在Linux)將工作:
zcat *.gz | awk -F'[\.;:]' '{arr[$2]++} END{for(i in arr){print i, arr[i]} }' 2>/dev/null
重定向是存在的,因爲一些awks,特別是呆子,會抱怨。不是元字符
試試這個:
zgrep -c '2013-11-21;0[89]:.*abc' file.gz
完美。這就是我一直在尋找的感謝! – codehammer
@Hiten很高興幫助!如果某個帖子回答了您的問題,請將其標記爲已接受,以便其他人知道問題已解決。爲此,請檢查投票箭頭正下方的刻度線。 – Rubens
錯過了它..標誌着它被接受。再次感謝。 – codehammer