按小时计算

时间:2012-11-27 10:00:57

标签: linux unix awk

用什么命令来计算我们每小时或每分钟看到一定数量的命令?

文件:

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

3 个答案:

答案 0 :(得分:29)

可以使用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前缀行的出现次数。

答案 1 :(得分: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

答案 2 :(得分: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