Filtrar un archivo de registro

Filtrar un archivo de registro

Intenté filtrar mi archivo de registro por funcionalidad. Por ejemplo:

195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&xxxx...
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer&xxxx...
197.xx.x.x - - [13/Apr/2017:09:10:xx +0200] "POST /userx/index.php?m=meeting&xxxx...
197.xx.x.x - - [13/Apr/2017:09:20:xx +0200] "POST /userx/index.php?m=dashboard&xxxx...

En este caso mis funcionalidades son contactos, cliente, reunión, panel. Intento ignorar la página de bienvenida que está por defecto. solía

awk '$7 !~ /m=dashboard/ ' log file

mi pregunta es ¿Puedo ignorar más funcionalidades que hay en un archivo?

cat file:
dashboard
meeting

Para tener solo estas líneas:

195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer

Respuesta1

sed '/\//!{H;d};G;/m=\(.*\)\n.*\1/d;P;d' file log

Explicación: Primero lea filecon las palabras clave del filtro, luego el archivo de registro. Las líneas que contienen no /se interpretan como palabras clave y se añaden al espacio de espera ( H). A otras líneas se les agrega el espacio de retención ( G) y se eliminan si la palabra clave después de m=se repite en la lista de palabras clave ( /m=\(.*\)\n.*\1/d). De lo contrario, se imprime sin el espacio de retención adjunto ( P).

Respuesta2

Dado que tu pregunta parece tener más sentido ahora, creo que estás buscando algo como esto:

awk -F= 'NR==FNR{l[$NF]=1; next} { if (!l[$NF]) print;}' ignore_words your_log_file

Editar

Como Sundeep señaló en el comentario anterior, puedes usar grep de la siguiente manera:

grep -Fvf ignore_words log_file

Para ver -Fvfpara qué se utilizan las opciones, consulte man grepla página.

información relacionada