Como eu extrairia as strings do agente do usuário de um arquivo de log?

5

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

Eu quero ver agora as strings do agente do usuário, mas o problema é que elas incluem vários espaços. Aqui está uma linha de arquivo de log típica. O 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 que o awk para isso?

    
por DisgruntledGoat 18.07.2011 / 16:11

2 respostas

12

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

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

ou:

cut -d\" -f 6
    
por 18.07.2011 / 16:18
2
perl -ne 'if(/"([^"]+)"$/){$ua{$1}++;} END{for(keys %ua){print "$ua{$_} $_\n"}}' \
  access_log
    
por 18.07.2011 / 16:21

Tags