Я попытался отфильтровать свой файл журнала по функциональности. Например:
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
страницу.