Ich habe versucht, meine Protokolldatei nach Funktionalität zu filtern. Beispiel:
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...
In diesem Fall sind meine Funktionen Kontakte, Kunden, Meetings und Dashboard. Ich versuche, die standardmäßige Willkommensseite zu ignorieren. Ich habe
awk '$7 !~ /m=dashboard/ ' log file
Meine Frage lautet: Kann ich weitere Funktionen ignorieren, die in einer Datei enthalten sind?
cat file:
dashboard
meeting
Um nur diese Zeilen zu haben:
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
Antwort1
sed '/\//!{H;d};G;/m=\(.*\)\n.*\1/d;P;d' file log
Erklärung: Zuerst wird file
mit den Filterschlüsselwörtern gelesen, dann das Logfile. Zeilen die keins enthalten /
werden als Schlüsselwörter interpretiert und an das Hold Space angehängt ( H
). Andere Zeilen bekommen das Hold Space angehängt ( G
) und werden gelöscht, wenn das Schlüsselwort nach dem m=
in der Schlüsselwortliste wiederholt vorkommt ( /m=\(.*\)\n.*\1/d
). Wenn nicht, wird es ohne das angehängte Hold Space ausgedruckt ( P
).
Antwort2
Da Ihre Frage jetzt mehr Sinn zu ergeben scheint, gehe ich davon aus, dass Sie nach etwas wie dem Folgenden suchen:
awk -F= 'NR==FNR{l[$NF]=1; next} { if (!l[$NF]) print;}' ignore_words your_log_file
Bearbeiten
Wie Sundeep im obigen Kommentar anmerkte, könnten Sie grep wie folgt verwenden:
grep -Fvf ignore_words log_file
Um zu sehen, wofür die Optionen -Fvf
verwendet werden, konsultieren Sie bitte man grep
die Seite.