Filtrar um arquivo de log

Filtrar um arquivo de log

Tentei filtrar meu arquivo de log pela funcionalidade. Por exemplo:

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...

Neste caso minhas funcionalidades são contatos,cliente,reunião,painel. Tento ignorar a página de boas-vindas que é por padrão. eu usei

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

minha pergunta é: posso ignorar mais funcionalidades que estão em um arquivo?

cat file:
dashboard
meeting

Para ter apenas estas linhas:

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

Responder1

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

Explicação: Primeiro leia fileas palavras-chave do filtro e depois o arquivo de log. Linhas contendo no /são interpretadas como palavras-chave e anexadas ao espaço de espera ( H). Outras linhas recebem o espaço de espera anexado ( G) e são excluídas se a palavra-chave após m=for repetida na lista de palavras-chave ( /m=\(.*\)\n.*\1/d). Caso contrário, será impresso sem o espaço de espera anexado ( P).

Responder2

Como sua pergunta parece fazer mais sentido agora, acho que você está procurando algo assim:

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

Editar

Como Sundeep apontou no comentário acima, você poderia usar grep da seguinte maneira:

grep -Fvf ignore_words log_file

Para ver -Fvfpara que servem as opções, consulte man grepa página.

informação relacionada