Подсчитывать по часам - программирование
Подтвердить что ты не робот

Подсчитывать по часам

Какова была бы команда подсчитать, сколько раз мы видели определенную строку за час или минуту?

Файл:

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
4b9b3361

Ответ 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