2013-03-06 55 views
0

現在我使用此命令獲取日誌文件中模式發生的次數。僅在發生其他模式的日誌文件中檢索模式發生

cat filename.log | grep -c 'myPattern' 

問題是我想知道只發生兩個或三個小時之間的事件。實際上,concat兩個模式識別,一個選擇文本範圍來應用第二個模式識別。

我嘗試這樣的事情,但不工作:

cat filename.log | grep -c 'myPattern' | grep {21:,22:,23:} 

我從來沒有明白,當你Concat的兩個或多個管道的流量如何。

日誌文件示例:

20130305-22:31:36 0 0000 pcxvx28p script.ksh    1.10  FIN 
20130305-22:36:36 0 0000 pcxvx28p script.ksh    1.10  DEBUT 
20130305-22:31:36 0 0000 pcxvx28p script.ksh    1.10  OPERACION BUSQUEDA 
20130305-22:36:36 0 0000 pcxvx28p script.ksh    1.10  numero xxx20012 

注:我用KornShell(KSH) 在此先感謝。

+0

請問你的日誌文件看起來像上面的線將計數匹配項?貼一些例子。另外,你不需要'cat' – Kent 2013-03-06 11:06:20

+0

我添加了3行日誌文件。 – 2013-03-06 11:48:31

回答

1

嘗試

grep -c '^20130305-2[1-3].*myPattern' your.log 

日期是否應添加入模式也是如此,因爲你的日誌可能有一天以上的數據。

期間21:00 -23:59:59

+0

工作正常。謝謝 – 2013-03-06 12:27:02

+0

你的回答很好,但我需要更準確地使腳本更一般。 grep -c'-2 [1-3]。:* myPattern'your.log - >我想要做這樣的事情,但是grep正在傳遞一個錯誤消息。我想在搜索模式中添加之前的' - '和之後的':'。 – 2013-03-06 16:22:06

+0

@JorgeVegaSánchez抱歉,我不明白你在說什麼......「我想在搜索模式中添加' - '之前和':'之後。」你能理解你自己嗎? – Kent 2013-03-06 16:39:05

0

-c選項不應該被使用,因爲它提供了匹配行,而不是匹配的文本行數

grep 'myPattern' filename.log | grep '\(21:\)\|\(22:\)\|\(23:\)' 
+0

我嘗試你的命令,但不適合我。之後,我嘗試'cat filename.log'| grep'\(21:\)\ | \(22:\)\ | \(23:\)''僅顯示具有模式21:22:或23的行:但不起作用。 – 2013-03-06 11:49:03

+0

它正在爲我工​​作。請注意我使用的每個括號前的'\\'。 – uba 2013-03-06 11:55:16

+0

但是,如何知道發生的次數,對不起,我忘了寫我使用Korn shell。我沒有得到任何結果。 – 2013-03-06 12:06:12