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
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?
perl -ne 'if(/"([^"]+)"$/){$ua{$1}++;} END{for(keys %ua){print "$ua{$_} $_\n"}}' \ access_log