Como extrair as seqüências de caracteres do agente do usuário de um arquivo de log?

12

Atualmente, estou executando um comando como este, para obter o conteúdo mais solicitado:

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

Agora quero ver as seqüências de caracteres do agente do usuário, mas o problema é que elas incluem vários espaços. Aqui está uma linha típica de arquivo de log. A UA é a última seção delimitada por aspas:

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"

Existe uma ferramenta melhor do que o awk para isso?

DisgruntledGoat
fonte

Respostas:

19

Se esse formato for consistente e o campo estiver realmente entre aspas duplas, você poderá usar awk ou recortar "como o delimitador de campo:

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

ou:

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