Die oben genannten Tools sind zwar alle cool, aber ich glaube, ich weiß, was der Fragesteller gefragt hat. Es schmerzt mich oft, dass ich die Informationen nicht wie bei anderen Dateien aus einem Zugriffsprotokoll ziehen kann.
Das liegt am dummen Zugriffsprotokollformat:
127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
Warum haben sie [] für das Datum und "" für andere Dinge verwendet? Dachten sie, wir würden nicht wissen, dass ein Datum in Feld 4 ist? Es ist unglaublich frustrierend.
Das derzeit beste Tool dafür ist gawk:
gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'
auf den Daten darüber würde dies Ihnen geben:
"GET /manual/elisp/index.html HTTP/1.1"
Mit anderen Worten, der FPAT gibt Ihnen die Möglichkeit, die Felder des Apache-Logs so herauszuholen, als wären es tatsächliche Felder, anstatt nur durch Leerzeichen getrennte Entitäten. Das ist immer was ich will. Das kann ich dann mit einer Pipeline etwas genauer analysieren.
Das Funktionieren des FSPAT wird hier definiert: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
Sie können daher einen Alias einrichten, um einen Gawk zu erstellen, der Apache-Protokolle analysieren kann:
alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' "
apacheawk '$6 ~ /200/ { print $5 } | sort | uniq
habe das für mich gemacht:
"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"
und natürlich ist jetzt fast alles möglich.
Genießen!