Количество сообщений об ошибках в файле журнала

Количество сообщений об ошибках в файле журнала
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:1
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:2
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:5
java.lang.NullPointerException:12
java.lang.NullPointerException:7
java.lang.NullPointerException:18
java.lang.NullPointerException:2 

Как вы видите, у меня есть 3 дублирующихся ошибки mysql, и их частота появляется в конце. При первой ошибке появляется 1, при второй ошибке появляется 2, а при третьей ошибке появляется 5. Я хочу, чтобы скрипт оставался одной дублирующей строкой с суммой. Делаю то же самое для ошибок java.

Ожидаемый результат:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:8
java.lang.NullPointerException:39

решение1

awk 'BEGIN{ FS=OFS=":" }
   { freq=$NF; sub(/:[^:]*$/, ""); seen[$0]+=freq }
END{ for (x in seen) print x, seen[x] }' infile

FS — разделитель входных полей, а OFS — разделитель выходных полей; в обоих случаях мы устанавливаем двоеточие; затем мы захватываем последнее поле $NFво временную переменную freq, а затем удаляем последнее поле из текущей входной записи $0с помощью функции sub().

при этом seen[$0]+=freqмы суммируем те же строки журнала (последнее поле уже исключено) по значению последнего поля, поскольку их частоту мы freqпредварительно сохранили в переменной.

затем в КОНЦЕ мы проходим по массиву и выводим строки, а затем их общую частоту.

Связанный контент