Situazione:
Ho un file di grandi dimensioni (milioni di linee) contenente indirizzi IP e porte da una cattura di rete di diverse ore, un ip / porta per linea. Le linee sono di questo formato:
ip.ad.dre.ss[:port]
Risultato desiderato:
C'è una voce per ogni pacchetto che ho ricevuto durante la registrazione, quindi ci sono molti indirizzi duplicati. Mi piacerebbe poterlo eseguire attraverso uno script di shell di qualche tipo che sarà in grado di ridurlo a righe del formato
ip.ad.dre.ss[:port] count
dove countè il numero di occorrenze di quello specifico indirizzo (e porta). Non è necessario eseguire alcun lavoro speciale, trattare porte diverse come indirizzi diversi.
Finora, sto usando questo comando per eliminare tutti gli indirizzi IP dal file di registro:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
Da ciò, posso usare un regex abbastanza semplice per estrarre tutti gli indirizzi IP che sono stati inviati dal mio indirizzo (di cui non mi interessa)
Posso quindi utilizzare quanto segue per estrarre le voci univoche:
sort -u ips.txt > intermediate.txt
Non so come posso aggregare i conteggi delle righe in qualche modo con l'ordinamento.
-bgrcoincidenza assomigli a un mnemonicobigger, che è quello che vogliamo in cima.