Stündliche Daten aus der Protokolldatei zählen

Stündliche Daten aus der Protokolldatei zählen

Ich möchte stündlich die Datensatzanzahl aus der Protokolldatei abrufen. Hier sind die Beispieldaten:

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

von oben sollten die Daten ausgegeben werden;

00 = 5
01 = 2

Antwort1

cut -f2 -d' ' logfile
| cut -f1 -d:
| sort
| uniq -c
| sed 's/ *\([0-9]\+\) \([0-9][0-9]\)/\2 = \1/'
| sort
  1. gibt nur die Uhrzeit aus.
  2. extrahiert nur die Stunden.
  3. Sortieren der Ausgabe - wird von der folgenden Zeile benötigt
  4. zählt die Vorkommnisse jeder Stunde, gibt auscount hour
  5. behebt die Formatierung
  6. sortiert nach Stunden

Antwort2

Sie können finddas -printfAttribut wie unten verwenden. Ich verwende dies in meiner täglichen Arbeit:

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

Antwort3

Es gibt viele Lösungen, eine davon ist

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 

verwandte Informationen