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 você pode ver, tenho 3 erros de mysql duplicados e sua frequência aparece no final. No primeiro erro aparece 1, no segundo erro aparece 2 e na terceira vez aparece 5. Quero que o script permaneça uma linha duplicada com soma. Fazendo o mesmo para os erros de java.
Resultado esperado:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:8
java.lang.NullPointerException:39
Responder1
awk 'BEGIN{ FS=OFS=":" }
{ freq=$NF; sub(/:[^:]*$/, ""); seen[$0]+=freq }
END{ for (x in seen) print x, seen[x] }' infile
FS é o separador de campos de entrada e OFS é o separador de campos de saída; ambos definimos como dois pontos; então pegamos o último campo $NF
em uma variável temporária freq
e removemos o último campo do registro de entrada atual $0
usando a função sub().
ao fazer isso, seen[$0]+=freq
estamos somando as mesmas linhas de log (o último campo já está excluído) no valor do último campo conforme a frequência que mantemos na freq
variável anteriormente.
então, no FINAL, percorremos o array e imprimimos as linhas seguidas de sua frequência total.