Situação:
Eu tenho um arquivo grande (milhões de linhas) contendo endereços IP e portas de uma captura de rede de várias horas, um ip / porta por linha. As linhas são deste formato:
ip.ad.dre.ss[:port]
Resultado desejado:
Há uma entrada para cada pacote que recebi durante o logon, portanto há muitos endereços duplicados. Eu gostaria de poder executar isso por meio de um script de shell de algum tipo que possa reduzi-lo a linhas do formato
ip.ad.dre.ss[:port] count
onde count
é o número de ocorrências desse endereço específico (e porta). Nenhum trabalho especial precisa ser feito; trate portas diferentes como endereços diferentes.
Até agora, estou usando este comando para raspar todos os endereços IP do arquivo de log:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
A partir disso, posso usar uma regex bastante simples para eliminar todos os endereços IP que foram enviados pelo meu endereço (dos quais não me importo)
Posso então usar o seguinte para extrair as entradas exclusivas:
sort -u ips.txt > intermediate.txt
Não sei como agregar as contagens de linha de alguma forma com a classificação.
-bgr
coincidentemente parece um mnemônicobigger
, que é o que queremos no topo.