기능별로 로그 파일을 필터링하려고 했습니다. 예를 들면 다음과 같습니다.
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
페이지를 참조하세요.