2014-03-24 59 views
0

所以我有一個大的日誌文件,每行包含一個日期。我想統計包含每個日期的行數。grep中的多個計數?

我想出了一個可怕的解決方案,包括手動鍵入每個以下命令:

grep -c "2014-01-01" big.log 
grep -c "2014-01-02" big.log 
grep -c "2014-01-03" big.log 

我也可以寫一個小的Python腳本,但似乎矯枉過正。有更快捷/更優雅的解決方案嗎?

+1

要檢查哪個日期範圍內做?從1到...? – fedorqui

回答

1

您也許可以使用正則表達式,然後使用uniq -c來計算結果。

看到一個例子:

$ cat a 
2014-01-03 aaa 
2014-01-03 aaa 
2014-01-02 aaa 
2014-01-01 aaa 
2014-01-04 aaa 
hello 
2014-01-01 aaa 

而且讓我們來看看所有2014-01-0X,是X一個數字,並計數:

$ grep -o "2014-01-0[0-9]" a | sort | uniq -c 
     2 2014-01-01 
     1 2014-01-02 
     2 2014-01-03 
     1 2014-01-04 

注意管道到sort是需要做出uniq -c正常工作。你可以在我對what is the meaning of delimiter in cut and why in this command it is sorting twice?的回答中看到更多關於它的信息。

1

試試這個

grep '2014-01-01' big.log |wc -l 
grep '2014-01-02' big.log |wc -l 
grep '2014-01-03' big.log |wc -l 

希望這將解決烏爾概率

3

借款fedorqui的樣本數據文件 - 感謝@fedorqui :-)

awk '/2014/{x[$1]++} END{for (k in x) print x[k],k}' file 
2 2014-01-01 
1 2014-01-02 
2 2014-01-03 
1 2014-01-04 
+0

好的!我也想要我的版權:)請注意,同一行中的多個匹配只會計算一次,儘管使用'grep -c'的OP也是如此。 – fedorqui

+0

我已經投票贊成您的解決方案! –