
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
- solo genera la hora.
- solo extrae las horas.
- Ordene la salida, necesaria para la siguiente línea.
- cuenta las ocurrencias de cada hora, salidas
count hour
- corrige el formato
- ordena por horas
Respuesta2
Puede usarlo find
con -printf
el 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