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
предварительно сохранили в переменной.
затем в КОНЦЕ мы проходим по массиву и выводим строки, а затем их общую частоту.