contar mensajes de error en un archivo de registro

contar mensajes de error en un archivo de registro
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 

Como puede ver, tengo 3 errores de MySQL duplicados y su frecuencia aparece al final. En el primer error aparece 1, en el segundo error aparece 2 y en la tercera vez aparece 5. Quiero que el script permanezca en una línea duplicada con la suma. Haciendo lo mismo con los errores de Java.

Rendimiento esperado:

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

Respuesta1

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

FS es el separador de campo de entrada y OFS es el separador de campo de salida; ambos fijamos dos puntos; luego tomamos el último campo $NFen una variable temporal freqy luego eliminamos el último campo del registro de entrada actual $0usando la función sub().

Al hacerlo, seen[$0]+=freqestamos resumiendo las mismas líneas de registro (el último campo ya está excluido) en el valor del último campo como su frecuencia que mantenemos en la freqvariable anteriormente.

luego, al FINAL, recorremos la matriz e imprimimos las líneas seguidas de su frecuencia total.

información relacionada