Enquanto as ferramentas acima são legais, acho que sei o que o interlocutor estava perguntando. Dói-me muitas vezes não conseguir extrair as informações de um log de acesso da mesma maneira que faço com outros arquivos.
É por causa do formato de log de acesso burro:
127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
Por que eles usaram [] para a data e "" para outras coisas? eles pensaram que não saberíamos que havia uma data no campo 4? É incrivelmente frustrante.
A melhor ferramenta agora para isso é o gawk:
gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'
nos dados acima, isso forneceria a você:
"GET /manual/elisp/index.html HTTP/1.1"
Em outras palavras, o FPAT oferece a capacidade de extrair os campos do apache-log como se fossem campos reais, em vez de apenas entidades separadas por espaço. É sempre isso que eu quero. Posso então analisar isso um pouco mais com um pipeline.
O funcionamento do FSPAT é definido aqui: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
Portanto, você pode configurar um alias para criar um gawk que possa analisar os logs do apache:
alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' "
apacheawk '$6 ~ /200/ { print $5 } | sort | uniq
fez isso para mim:
"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"
e, claro, quase tudo o mais é agora possível.
Desfrutar!