Фильтрация файла журнала

Фильтрация файла журнала

Я попытался отфильтровать свой файл журнала по функциональности. Например:

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

В этом случае мои функции - контакты, клиент, встреча, панель управления Я стараюсь игнорировать Приветственную страницу, которая по умолчанию. Я использовал

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

Мой вопрос: могу ли я игнорировать больше функций, которые есть в файле?

cat file:
dashboard
meeting

Чтобы иметь только эти строки:

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

решение1

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

Объяснение: Сначала считывается fileс ключевыми словами фильтра, затем файл журнала. Строки, содержащие no, /интерпретируются как ключевые слова и добавляются в пространство удержания ( H). К другим строкам добавляется пространство удержания ( G) и они удаляются, если ключевое слово после m=повторяется в списке ключевых слов ( /m=\(.*\)\n.*\1/d). Если нет, оно печатается без добавленного пространства удержания ( P).

решение2

Поскольку теперь ваш вопрос кажется более понятным, я думаю, вы ищете что-то вроде этого:

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

Редактировать

Как указал Sundeep в комментарии выше, вы можете использовать grep следующим образом:

grep -Fvf ignore_words log_file

-FvfЧтобы узнать , для чего используются эти опции , посетите man grepстраницу.

Связанный контент