Bash Script: zlicza unikalne linie w pliku
Mam duży plik (miliony linii) zawierający adresy IP i porty z kilkugodzinnego przechwytywania sieci, jeden IP / port na linię. Linie mają ten format:
ip.ad.dre.ss[:port]
Pożądany rezultat:Istnieje wpis dla każdego pakietu, który otrzymałem podczas logowania, więc istnieje wiele duplikatów adresów. Chciałbym móc to uruchomić za pomocą jakiegoś skryptu powłoki, który będzie w stanie zredukować go do linii formatu
ip.ad.dre.ss[:port] count
gdziecount
to liczba wystąpień tego konkretnego adresu (i portu). Nie trzeba wykonywać żadnych specjalnych prac, traktować różne porty jako różne adresy.
Do tej pory używam tego polecenia, aby zeskanować 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
Na tej podstawie mogę użyć dość prostego wyrażenia regularnego, aby usunąć wszystkie adresy IP wysłane przez mój adres (na czym mi nie zależy)
Następnie mogę użyć następujących elementów, aby wyodrębnić unikalne wpisy:
sort -u ips.txt > intermediate.txt
Nie wiem, jak w jakiś sposób mogę zsumować liczby linii z sortowaniem.