Cuente los datos por hora del archivo de registro

Cuente los datos por hora del archivo de registro

Quiero obtener el recuento de registros cada hora del archivo de registro. aquí están los datos de muestra;

001:2017-05-23 00:00:01 002:10.10.10.63
001:2017-05-23 00:00:03 002:10.10.10.63
001:2017-05-23 00:00:05 002:10.10.10.63
001:2017-05-23 00:00:07 002:10.10.10.63
001:2017-05-23 00:00:09 002:10.10.10.63
001:2017-05-23 01:00:12 002:10.10.10.63
001:2017-05-23 01:00:14 002:10.10.10.63

desde arriba la salida de datos debe ser;

00 = 5
01 = 2

Respuesta1

cut -f2 -d' ' logfile
| cut -f1 -d:
| sort
| uniq -c
| sed 's/ *\([0-9]\+\) \([0-9][0-9]\)/\2 = \1/'
| sort
  1. solo genera la hora.
  2. solo extrae las horas.
  3. Ordene la salida, necesaria para la siguiente línea.
  4. cuenta las ocurrencias de cada hora, salidascount hour
  5. corrige el formato
  6. ordena por horas

Respuesta2

Puede usarlo findcon -printfel atributo como se muestra a continuación, yo usé esto en mi operación diaria:

find /path/ -type f -printf '%TY-%Tm-%Td-%TH\n' | sort | uniq -c

Respuesta3

Hay muchas soluciones, una de ellas es

log_file=/var/log/messages                        # log file for extract
d=2022-10-28                                      # start date
while [ "$d" != 2022-11-04 ]; do                  # loop for date range
  echo $d                                         # echo ACTUAL date
  for h in {00..24}; do                           # loop for hours
    act=$(date -d "$d" +'%b %d')" $h:"            # create date for ACTUAL date in requested format: %b return month in Jan Feb..., %d return month number
    echo $act                                     # Print actual hour
    grep "^$act" $log_file                        # grep $ACT from beginning of line of log_file and count lines
  done
  d=$(date -I -d "$d + 1 day")                    # add +1 day for start date to the main loop
done 

información relacionada