Sytuacja:
Mam duży plik (miliony wierszy) zawierający adresy IP i porty z kilku godzinnego przechwytywania sieci, po jednym IP / port na linię. Linie mają następujący format:
ip.ad.dre.ss[:port]
Pożądany rezultat:
Każdy pakiet, który otrzymałem podczas logowania, ma swój wpis, więc istnieje wiele zduplikowanych adresów. Chciałbym móc to uruchomić za pomocą jakiegoś skryptu powłoki, który będzie w stanie zredukować to do wierszy formatu
ip.ad.dre.ss[:port] count
gdzie count
jest liczbą wystąpień tego konkretnego adresu (i portu). Nie trzeba wykonywać żadnych specjalnych czynności, traktuj różne porty jako różne adresy.
Do tej pory używam tego polecenia, aby zeskrobać wszystkie adresy IP z pliku dziennika:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
Z tego mogę użyć dość prostego wyrażenia regularnego, aby zeskrobać wszystkie adresy IP, które zostały wysłane z mojego adresu (co mnie nie obchodzi)
Następnie mogę użyć następujących elementów, aby wyodrębnić unikalne wpisy:
sort -u ips.txt > intermediate.txt
Nie wiem, jak mogę zagregować liczbę wierszy za pomocą sortowania.
-bgr
przypadkowo wygląda jak mnemonik dlabigger
, którego chcemy na górze.