2012-11-27 68 views
14

計算我們每小時或每分鐘看到特定行的次數是多少次?按小時計數行數

文件:

Nov 26 08:50:51 
Nov 26 08:50:51 
Nov 26 08:51:09 
Nov 26 08:51:09 
Nov 26 08:51:09 
Nov 26 08:51:09 
Nov 26 08:51:40 

輸出我想看看:

一分:

Nov 26 08:50 2 
Nov 26 08:51 5 

按小時:

Nov 26 08  7 
+0

謝謝大家對你的答案:)幫了不少忙。 – Jola

+1

如果日期發生變化怎麼辦?你是否在尋找每天08:50的產量,或每天08:50的產量? –

回答

26

這可以用uniq完成:

$ uniq -w9 -c file  # by hour 
     7 Nov 26 08:50:51 
$ uniq -w12 -c file  # by minute 
     2 Nov 26 08:50:51 
     5 Nov 26 08:51:09 

-w比較不超過第一個n個字符。

-c前綴行數由出現次數決定。

+4

+1非常有創意 – kev

+0

「但是如果天<10寫入沒有前導0?哦等待o_O它將工作X_X」。做得好+1 – Utopik

+1

這很棒,但我必須指出,這個解決方案僅限於Linux。 * BSD中的'uniq'(包括OSX)不包含'-w'選項。 – ghoti

1

通過小時:

awk '{split($3,a,":");b[$1" "$2" "a[1]]++}END{for(i in b)print i,b[i]}' your_file 

以下測試:

> awk '{split($3,a,":");b[$1" "$2" "a[1]":"a[2]]++}END{for(i in b)print i,b[i]}' temp 
Nov 26 08:50 2 
Nov 26 08:51 5 
> 

通過分鐘:

awk '{split($3,a,":");b[$1" "$2" "a[1]":"a[2]]++}END{for(i in b)print i,b[i]}' your_file 

以下測試:

> awk '{split($3,a,":");b[$1" "$2" "a[1]]++}END{for(i in b)print i,b[i]}' temp 
Nov 26 08 7 
2

awk的一班輪給你按小時和分鐘在一個發射次數:

awk -F: '{h[$1]++;m[$1":"$2]++;}END{for(x in h)print x,h[x]; print "---"; for(x in m)print x,m[x]}' file 

測試

kent$ echo "Nov 26 08:50:51 
Nov 26 08:50:51 
Nov 26 08:51:09 
Nov 26 08:51:09 
Nov 26 08:51:09 
Nov 26 08:51:09 
Nov 26 08:51:40"|awk -F: '{h[$1]++;m[$1":"$2]++;}END{for(x in h)print x,h[x]; print "---"; for(x in m)print x,m[x]}'  

輸出

Nov 26 08 7 
--- 
Nov 26 08:50 2 
Nov 26 08:51 5 
+1

感謝您的支持,正是我所需要的。做一個管道和排序'|排序「也可以按照正確的順序獲取所有內容。 – dgig