Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.59.165] |
|
Сообщ.
#1
,
|
|
|
Распарсил логи firewall'а. на выходе текст в Memo.
Последняя запись в каждой строке - IP адрес соединения. Как мне быстро подсчитать статистику по IP адресам? Вход(пример. Самих строк > 100 000) 2017-11-08 00:53:31 103.224.80.24 2017-11-08 02:17:09 103.224.80.24 2017-11-08 03:40:42 103.224.80.24 2017-11-08 05:04:16 103.224.80.24 2017-11-08 05:53:20 5.223.59.44 2017-11-08 06:27:54 103.224.80.24 2017-11-08 07:03:42 46.148.20.25 2017-11-08 07:51:25 103.224.80.24 2017-11-08 08:47:53 95.24.105.204 2017-11-08 08:47:54 95.24.105.204 2017-11-08 09:08:33 192.168.0.250 2017-11-08 09:08:45 192.168.0.250 2017-11-08 09:10:57 185.27.50.118 2017-11-08 09:11:06 185.27.50.118 2017-11-08 09:11:06 185.27.50.118 2017-11-08 09:14:53 103.224.80.24 2017-11-08 09:38:19 192.168.0.250 2017-11-08 09:38:20 192.168.0.250 2017-11-08 09:39:28 192.168.0.250 Чтобы на выходе(пускай в memo2) было что-то типа: 192.168.0.250 - 4 185.27.50.118 - 10 95.24.105.204 - 20 Сортировка не нужна. Я конечно могу нагородить огород с двумерным массивом, но думаю что есть метод проще. |
Сообщ.
#2
,
|
|
|
Например, отделять последнюю запись и построить TDictionary, используя записи как ключ, а счетчик - value
Примерно так: Dict: TDictionary<string, integer> для каждой строки выделить ipstring Dict.TryGetValue(ipstring, cnt); Dict.AddOrSetValue(ipstring, cnt + 1); |
Сообщ.
#3
,
|
|
|
Var Dict: TDictionary<string, integer>; [dcc32 Error] Unit1.pas(51): E2003 Undeclared identifier: 'TDictionary<,>' |
Сообщ.
#4
,
|
|
|
uses generics.collections;
|
Сообщ.
#5
,
|
|
|
Цитата MBo @ cnt А тут что передавать? |
Сообщ.
#6
,
|
|
|
Целочисленная переменная. При отсутствии ipstring первый метод обнулит переменную, второй занесет в слварь строку с единичным счетчиком
|
Сообщ.
#7
,
|
|
|
Цитата ^D^ima @ Я конечно могу нагородить огород с двумерным массивом, но думаю что есть метод проще. Простой древний способ - хранить числа в TStringList.Objects[i]: if List.Find(S,i) then List.Objects[i]:=TObject(integer(List.Objects[i])+1) else List.InsertObject(i,S,TObject(1)); |
Сообщ.
#8
,
|
|
|
awk '{print $3}' | sort | uniq -c | sort
|
Сообщ.
#9
,
|
|
|
Gonarh
и на каком это шеле? |
Сообщ.
#10
,
|
|
|
Таки обичный баш.
|