Wie würde ich die Zeichenfolgen des Benutzeragenten aus einer Protokolldatei extrahieren?

11

Derzeit führe ich einen Befehl wie diesen aus, um den am häufigsten angeforderten Inhalt zu erhalten:

grep "17\/Jul\/2011" other_vhosts_access.log | awk '{print $8}' | sort | uniq -c | sort -nr

Ich möchte jetzt die Zeichenfolgen des Benutzeragenten sehen, aber das Problem ist, dass sie mehrere Leerzeichen enthalten. Hier ist eine typische Protokolldateizeile. Die UA ist der letzte durch Anführungszeichen getrennte Abschnitt:

example.com:80 [ip] - - [17/Jul/2011:23:59:59 +0100] "GET [url] HTTP/1.1" 200 6449 "[referer]" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30"

Gibt es dafür ein besseres Werkzeug als awk?

DisgruntledGoat
quelle

Antworten:

19

Wenn dieses Format konsistent ist und das Feld wirklich in doppelte Anführungszeichen eingeschlossen ist, können Sie entweder awk oder cut mit "als Feldtrennzeichen verwenden:

awk -F\" '{print $6}'

oder:

cut -d\" -f 6
Caleb
quelle
2
perl -ne 'if (/ "([^"] +) "$ /) {$ ua {$ 1} ++;} END {for (Schlüssel% ua) {print" $ ua {$ _} $ _ \ n "}} '\
  access_log
RedGrittyBrick
quelle