Lage:
Ich habe eine große Datei (Millionen von Zeilen) mit IP-Adressen und Ports aus einer mehrstündigen Netzwerkerfassung, eine IP / Port pro Zeile. Zeilen haben dieses Format:
ip.ad.dre.ss[:port]
Erwünschtes Ergebnis:
Für jedes Paket, das ich während der Protokollierung erhalten habe, gibt es einen Eintrag, daher gibt es viele doppelte Adressen. Ich möchte dies durch ein Shell-Skript ausführen können, das es auf Zeilen des Formats reduzieren kann
ip.ad.dre.ss[:port] count
Wo count
ist die Anzahl der Vorkommen dieser bestimmten Adresse (und Port). Es müssen keine besonderen Arbeiten durchgeführt werden. Behandeln Sie verschiedene Ports als unterschiedliche Adressen.
Bisher verwende ich diesen Befehl, um alle IP-Adressen aus der Protokolldatei zu entfernen:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
Daraus kann ich einen ziemlich einfachen regulären Ausdruck verwenden, um alle IP-Adressen herauszukratzen, die von meiner Adresse gesendet wurden (was mir egal ist).
Ich kann dann Folgendes verwenden, um die eindeutigen Einträge zu extrahieren:
sort -u ips.txt > intermediate.txt
Ich weiß nicht, wie ich die Zeilenanzahl irgendwie mit sortieren aggregieren kann.
-bgr
zufällig eine Mnemonik aussiehtbigger
, was wir oben wollen.