Ситуація:
У мене є великий файл (мільйони рядків), що містить IP-адреси та порти з кількох годинних мережевих захоплень, один ip / порт на рядок. Рядки такого формату:
ip.ad.dre.ss[:port]
Бажаний результат:
Існує запис для кожного пакету, який я отримав під час реєстрації, тому є багато дублюючих адрес. Я хотів би мати можливість запустити це через якийсь скрипт оболонки, який зможе зменшити його до рядків формату
ip.ad.dre.ss[:port] count
де countкількість зустрічей цієї конкретної адреси (і порту). Ніякої особливої роботи не потрібно проводити, розглядайте різні порти як різні адреси.
Поки я використовую цю команду, щоб скребти всі IP-адреси з файлу журналу:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
З цього моменту я можу використовувати досить простий регулярний вираз, щоб викреслити всі IP-адреси, надіслані моєю адресою (що мене не хвилює)
Потім я можу використовувати наступні дані для вилучення унікальних записів:
sort -u ips.txt > intermediate.txt
Я не знаю, як я можу об'єднати відліки рядків якось із сортуванням.
-bgrвипадково виглядає мнемонічнеbigger, чого ми хочемо вгорі.