Jak wyodrębnić ciągi agenta użytkownika z pliku dziennika?

12

Obecnie uruchamiam takie polecenie, aby uzyskać najbardziej pożądaną treść:

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

Chcę teraz zobaczyć ciągi agenta użytkownika, ale problem polega na tym, że zawierają one kilka spacji. Oto typowa linia pliku dziennika. UA jest ostatnią sekcją oddzieloną znakami cudzysłowu:

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"

Czy jest na to lepsze narzędzie niż awk?

DisgruntledGoat
źródło

Odpowiedzi:

19

Jeśli ten format jest spójny, a pole jest naprawdę spakowane podwójnymi cudzysłowami, możesz użyć awk lub wyciąć "jako separator pola:

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

lub:

cut -d\" -f 6
Caleb
źródło
3
perl -ne 'if (/ "([^"] +) "$ /) {$ ua {$ 1} ++;} END {for (klucze% ua) {print" $ ua {$ _} $ _ \ n „}}” \
  access_log
RedGrittyBrick
źródło