Intereting Posts

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

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

195.xx.xx - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&xxxx... 192.xx.xx - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer&xxxx... 197.xx.xx - - [13/Apr/2017:09:10:xx +0200] "POST /userx/index.php?m=meeting&xxxx... 197.xx.xx - - [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.xx - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts 192.xx.xx - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer 

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

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

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

 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 .