로그 파일 필터링

로그 파일 필터링

기능별로 로그 파일을 필터링하려고 했습니다. 예를 들면 다음과 같습니다.

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/dP

답변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페이지를 참조하세요.

관련 정보