로그 파일 필터링

로그 파일 필터링

예를 들어 기능별로 로그 파일을 필터링하려고 합니다.

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

관련 정보