Подсчитывать по часам
Какова была бы команда подсчитать, сколько раз мы видели определенную строку за час или минуту?
Файл:
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
Ответы
Ответ 1
Это можно сделать с помощью 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
префикс строк по количеству вхождений.
Ответ 2
awk one-liner дает вам количество часов и минут за один снимок:
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
Ответ 3
По часам:
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