所以我有一個大的日誌文件,每行包含一個日期。我想統計包含每個日期的行數。grep中的多個計數?
我想出了一個可怕的解決方案,包括手動鍵入每個以下命令:
grep -c "2014-01-01" big.log
grep -c "2014-01-02" big.log
grep -c "2014-01-03" big.log
我也可以寫一個小的Python腳本,但似乎矯枉過正。有更快捷/更優雅的解決方案嗎?
所以我有一個大的日誌文件,每行包含一個日期。我想統計包含每個日期的行數。grep中的多個計數?
我想出了一個可怕的解決方案,包括手動鍵入每個以下命令:
grep -c "2014-01-01" big.log
grep -c "2014-01-02" big.log
grep -c "2014-01-03" big.log
我也可以寫一個小的Python腳本,但似乎矯枉過正。有更快捷/更優雅的解決方案嗎?
您也許可以使用正則表達式,然後使用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?的回答中看到更多關於它的信息。
試試這個
grep '2014-01-01' big.log |wc -l
grep '2014-01-02' big.log |wc -l
grep '2014-01-03' big.log |wc -l
希望這將解決烏爾概率
借款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
好的!我也想要我的版權:)請注意,同一行中的多個匹配只會計算一次,儘管使用'grep -c'的OP也是如此。 – fedorqui
我已經投票贊成您的解決方案! –
要檢查哪個日期範圍內做?從1到...? – fedorqui