Situation :
J'ai un gros fichier (des millions de lignes) contenant des adresses IP et des ports provenant d'une capture réseau de plusieurs heures, une ip/un port par ligne. Les lignes sont de ce format :
ip.ad.dre.ss[:port]
Résultat souhaité :
Il y a une entrée pour chaque paquet que j'ai reçu pendant la journalisation, donc il y a beaucoup d'adresses en double. J'aimerais pouvoir faire passer ceci par un shell script de quelque sorte qui sera capable de le réduire à des lignes du format
ip.ad.dre.ss[:port] count
donde count
est le nombre d'occurrences de cette adresse (et de ce port) spécifique. Il n'y a pas de travail particulier à faire, traitez les différents ports comme des adresses différentes.
Pour l'instant, 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 rationnelle assez simple pour extraire toutes les adresses IP qui ont été envoyées par mon adresse (dont je ne me soucie pas).
Je peux alors utiliser la méthode suivante pour extraire les entrées uniques :
sort -u ips.txt > intermediate.txt
Je ne sais pas comment je peux agréger le nombre de lignes avec le tri.