Pular para o conteúdo

Contar e ordenar a quantidade de ocorrências de cada linha em um arquivo

Dica publicada em Shell Script / Introdução
Fábio Berbert de Paula fabio
Hits: 7.589 Categoria: Shell Script Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar

Contar e ordenar a quantidade de ocorrências de cada linha em um arquivo

Problema

Eu precisava levantar quais eram os IPs que mais estavam acessando meu servidor web e como fonte de dados usei o arquivo access.log do NGinx.

Solução

Uma linha de log do NGinx tem o seguinte formato:

201.xx.157.10 - - [24/Sep/2019:12:48:59 -0300] "GET /imagens/banners/udemy-cert.png HTTP/1.1" 200 26546 ".../artigo/Linux-no-Pendrive-Definitivamente-configuravel-e-persistente?pagina=2" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

O dado que eu preciso é o primeiro campo, o IP do usuário. Então vamos criar um segundo arquivo de log com apenas o primeiro campo de cada entrada:

cat access.log | cut -d ' ' -f 1 > ip_log.txt

Foi criado um arquivo chamado ip_log.txt com o seguinte formato:

18.184.94.52
54.83.152.140
52.58.160.43
3.86.142.166
35.158.131.185
46.229.168.145
18.185.28.42
3.120.174.144
3.123.35.240

Quero fazer o levantamento de quantas vezes cada IP acessou o site neste dia. Para isso vamos usar o comando sort combinado com uniq:

sort ip_log.txt | uniq -c | sort -bnr

A saída será algo como:

   9220 23.100.232.233
   2671 18.231.162.74
   2668 18.229.142.235
   2223 18.228.188.56
   2178 52.67.166.246


Até a próxima!

Problemas em diretório com milhares de arquivos [Resolvido]

O que é samba

Vim - substituindo somente no bloco selecionado

Redirecionando porta de saída no IPTABLES

Como ouvir rádios online via terminal

Acertando data e hora no Linux

SED - salvar resultados em novo arquivo

Apostila de Shell Script para iniciantes

Contagem regressiva no terminal

E-book GRATUITO de Shell Script do Júlio Neves

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.