Você pode fazer praticamente qualquer coisa com arquivos de log do apache apenas com o awk. Os arquivos de log do Apache são basicamente separados por espaços em branco, e você pode fingir que as citações não existem e acessar qualquer informação em que esteja interessado pelo número da coluna. A única ocasião em que isso é interrompido é se você tiver o formato de log combinado e estiver interessado em agentes de usuário, nesse ponto, será necessário usar aspas (") como separador e executar um comando awk separado. O seguinte mostrará os IPs de cada usuário que solicita a página de índice classificada pelo número de ocorrências:
awk -F'[ "]+' '$7 == "/" { ipcount[$1]++ }
END { for (i in ipcount) {
printf "%15s - %d\n", i, ipcount[i] } }' logfile.log
$ 7 é o URL solicitado. Você pode adicionar as condições que quiser no começo. Substitua o '$ 7 == "/" com qualquer informação que você quiser.
Se você substituir o $ 1 em (ipcount [$ 1] ++), poderá agrupar os resultados por outros critérios. Usando $ 7 mostraria quais páginas foram acessadas e com que frequência. Claro, então você gostaria de alterar a condição no início. O seguinte mostraria quais páginas foram acessadas por um usuário de um IP específico:
awk -F'[ "]+' '$1 == "1.2.3.4" { pagecount[$7]++ }
END { for (i in pagecount) {
printf "%15s - %d\n", i, pagecount[i] } }' logfile.log
Você também pode canalizar a saída por meio de ordenação para obter os resultados em ordem, como parte do comando shell ou também no próprio script awk:
awk -F'[ "]+' '$7 == "/" { ipcount[$1]++ }
END { for (i in ipcount) {
printf "%15s - %d\n", i, ipcount[i] | sort } }' logfile.log
O último seria útil se você decidisse expandir o script awk para imprimir outras informações. É tudo uma questão do que você quer descobrir. Estes devem servir como ponto de partida para o que você estiver interessado.