Encuentre los números de línea de las líneas de excepción en el archivo de registro

Encuentre los números de línea de las líneas de excepción en el archivo de registro

Estoy escribiendo un programa de script de shell para extraer algunas excepciones de un archivo de registro y realizar algún procesamiento. Actualmente estoy usando el siguiente comando en mi script para capturar los números de línea en el archivo de registro que tiene una excepción. Las líneas de excepción contendrán ERRORla palabra clave justo después de la fecha y la marca de tiempo.

lineNos=($(grep -n ERROR $file | grep Exception | cut -d':' -f1 | tail -3))

Mientras probaba el script actual, noté que algunas entradas del registro contienen ERROR y Excepciones en la misma fila, pero en realidad no es el tipo de ERROR que estoy buscando (ejemplo línea 5). Me gustaría modificar mi script de tal manera. que devolverá solo la línea número 3 en el siguiente registro de ejemplo.

2016-10-21 15:25:37,231 INFO Processinng current row  
2016-10-21 15:25:37,231 INFO com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 ERROR com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 DEBUG com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 DEBUG Processing row with ERROR and Exception 
2016-10-21 15:25:37,231 DEBUG processed row 1: 

Respuesta1

Si desea obtener las líneas con las palabras ERRORy Exception, intente:

grep -E "ERROR.*Exception" $file

Respuesta2

Si usa awken lugar de grep, no solo puede imprimir solo los números de línea (más precisamente,números récord) directamente, pero también prueba campos específicos delimitados por espacios en blanco individualmente, por ejemplo

awk '$3 == "ERROR" && /Exception/ {print NR}' logfile

o (aún más específicamente, limitar el partido Exceptional campo final)

awk '$3 == "ERROR" && $NF ~ /Exception/ {print NR}' logfile

Respuesta3

cat thelogfile.log | nl -ba | grep "ERROR"

Esto canalizará el archivo a nl a líneas numéricas, luego filtrará con grep las líneas de error. Si solo desea los números de línea de error, agregue awk '{print $1}'. También cat puede alinear números con el indicador -n, pero yo prefiero nl.

ejemplo de una variable de matriz de números de línea con errores;

linenos=($(cat -n thelogfile.log | grep "ERROR" | awk '{print $1}' | tr "\n" " " | sed 's/$/\n/'))

Editar:

ps el grep puede ser;

grep ",[0-9]* ERROR"

Respuesta4

Usando expresiones regulares más específicas:

grep '^[0-9, :-]\+ERROR' "$file"

información relacionada