Situation:
J'ai un gros fichier (des millions de lignes) contenant les adresses IP et les ports d'une capture réseau de plusieurs heures, un ip / port par ligne. Les lignes sont de ce format:
ip.ad.dre.ss[:port]
Résultat désiré:
Il y a une entrée pour chaque paquet que j'ai reçu lors de la journalisation, donc il y a beaucoup d'adresses en double. J'aimerais pouvoir l'exécuter via un script shell quelconque qui pourra le réduire en lignes du format
ip.ad.dre.ss[:port] count
où count
est le nombre d'occurrences de cette adresse (et port) spécifique. Aucun travail particulier ne doit être effectué, traitez les différents ports comme des adresses différentes.
Jusqu'à présent, j'utilise cette commande pour extraire toutes les adresses IP du fichier journal:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
À partir de là, je peux utiliser une expression régulière assez simple pour extraire toutes les adresses IP qui ont été envoyées par mon adresse (dont je ne me soucie pas)
Je peux ensuite utiliser ce qui suit pour extraire les entrées uniques:
sort -u ips.txt > intermediate.txt
Je ne sais pas comment je peux agréger les nombres de lignes avec tri.
-bgr
ressemble par hasard à un mnémonique pourbigger
, c'est ce que nous voulons au sommet.