Bash Script: Zähle einzelne Zeilen in einer Datei
Ich habe eine große Datei (Millionen Zeilen) mit IP-Adressen und Ports aus einer mehrstündigen Netzwerkerfassung, eine IP / Port pro Zeile. Zeilen haben folgendes Format:
ip.ad.dre.ss[:port]
Erwünschtes Ergebnis:Für jedes Paket, das ich während der Protokollierung erhalten habe, ist ein Eintrag vorhanden, sodass es viele doppelte Adressen gibt. Ich möchte in der Lage sein, dies durch eine Art Shell-Skript auszuführen, das es in der Lage sein wird, es auf Zeilen des Formats zu reduzieren
ip.ad.dre.ss[:port] count
wohercount
ist die Anzahl der Vorkommen dieser spezifischen Adresse (und des Ports). Es muss keine besondere Arbeit geleistet 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 mit einem relativ einfachen regulären Ausdruck alle IP-Adressen entfernen, die von meiner Adresse gesendet wurden (die mir egal sind).
Ich kann dann Folgendes verwenden, um die eindeutigen Einträge zu extrahieren:
sort -u ips.txt > intermediate.txt
Ich weiß nicht, wie ich die Zeilenzahlen irgendwie mit sortieren kann.