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 file
as 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 -Fvf
para que servem as opções, consulte man grep
a página.