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?

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

2
perl -ne 'if (/ "([^"] +) "$ /) {$ ua {$ 1} ++;} END {for (Schlüssel% ua) {print" $ ua {$ _} $ _ \ n "}} '\
  access_log
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.