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 file
con 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 -Fvf
para qué se utilizan las opciones, consulte man grep
la página.