Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление повторяющихся айпи (http://forum.oszone.net/showthread.php?t=232877)

dj_crazy_joker 15-04-2012 16:40 1900149

Удаление повторяющихся айпи
 
Прошу помощи есть веб сервер на локал машине
там оч большие логи
Код:

62.122.135.154 - - [13/Apr/2012:14:37:29 +0400] "GET / HTTP/1.1" 200 10192
172.21.221.26 - - [13/Apr/2012:14:38:09 +0400] "GET / HTTP/1.1" 200 10192
62.122.135.154 - - [13/Apr/2012:14:38:33 +0400] "GET / HTTP/1.1" 200 10192
180.61.12.95 - - [13/Apr/2012:14:39:50 +0400] "GET /files/3.20/download/05.04.2012/checker_2012-04-04_02.47.13.txt&sa=U&ei=YQKIT7mUNcSaiAfMzKnxCQ&ved=0CB8QFjAH&usg=AFQjCNHa8250gvgVdU9toDjeZ-i0_Fhf2A HTTP/1.1" 404 2978
178.178.1.237 - - [13/Apr/2012:14:40:17 +0400] "GET /files/3.20/download/30.03.2012/Result_out_out.txt HTTP/1.1" 200 1457771
180.61.12.95 - - [13/Apr/2012:14:40:34 +0400] "GET /files/3.20/download/05.04.2012/checker_2012-04-04_02.47.13.txt&sa=U&ei=lQKIT474G6-8iAft-5TMCQ&ved=0CB8QFjAH&usg=AFQjCNHnqjJ_lkw-RhslA2bHNH111jlSwQ HTTP/1.1" 404 2978
193.68.70.2 - - [13/Apr/2012:14:43:17 +0400] "GET /files/3.20/download/29.03.2012/10%D0%BA.txt HTTP/1.1" 200 471552
62.122.135.154 - - [13/Apr/2012:14:50:29 +0400] "GET / HTTP/1.1" 200 10192
94.229.71.155 - - [13/Apr/2012:14:56:46 +0400] "GET /files/3.20/download/06.04.2012/1k_mixa.txt HTTP/1.1" 200 77212
62.122.135.154 - - [13/Apr/2012:14:58:45 +0400] "GET / HTTP/1.1" 200 10192
62.122.135.154 - - [13/Apr/2012:14:58:45 +0400] "GET /css/style.css HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:14:58:45 +0400] "GET /images/logo.png HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:14:58:45 +0400] "GET /images/Untitled.jpg HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:15:00:39 +0400] "GET / HTTP/1.1" 200 10192
62.122.135.154 - - [13/Apr/2012:15:00:39 +0400] "GET /css/style.css HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:15:00:39 +0400] "GET /images/logo.png HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:15:00:39 +0400] "GET /images/Untitled.jpg HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:15:00:40 +0400] "GET /files.php HTTP/1.1" 200 9399
62.122.135.154 - - [13/Apr/2012:15:00:40 +0400] "GET /css/print.css HTTP/1.1" 404 2978
62.122.135.154 - - [13/Apr/2012:15:00:40 +0400] "GET /css/projection.css HTTP/1.1" 404 2978
62.122.135.154 - - [13/Apr/2012:15:00:40 +0400] "GET /img/01_strong_mini.gif HTTP/1.1" 404 2978
62.122.135.154 - - [13/Apr/2012:15:00:40 +0400] "GET /css/images/moin-h1-background.png HTTP/1.1" 404 2978
62.122.135.154 - - [13/Apr/2012:15:00:42 +0400] "GET / HTTP/1.1" 200 10192
62.122.135.154 - - [13/Apr/2012:15:01:03 +0400] "GET / HTTP/1.1" 200 10964
62.122.135.154 - - [13/Apr/2012:15:01:03 +0400] "GET /css/style.css HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:15:01:03 +0400] "GET /images/logo.png HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:15:01:03 +0400] "GET /images/Untitled.jpg HTTP/1.1" 304 -
62.122.135.154 - - [13/Apr/2012:15:01:06 +0400] "GET /files.php HTTP/1.1" 200 10171

товаришь написал прогу которая удялает всё что написано кроме айпи
она исполняеться в cmd такой командой
Код:

parser.exe access.log access_result.log
после этого создаёться access_result.log со списком айпи
Код:

62.122.135.154
172.21.221.26
62.122.135.154
180.61.12.95
178.178.1.237
180.61.12.95
193.68.70.2
62.122.135.154
94.229.71.155
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154
62.122.135.154

терь нужно удалять повторы, сначала пользовался веб формой для этого, но щас решил с помошью cmd решить эту проблемму

вопрос как это всё организовать??

Foreigner 15-04-2012 17:44 1900184

Цитата:

Цитата dj_crazy_joker
нужно удалять повторы »

Код:

@echo off
setlocal

for /f %%i in (access_result.log) do set "line_%%i=1"
for /f "tokens=2 delims=_=" %%i in (' set line_ ') do 1>>access_result.tmp echo %%i
move access_result.tmp access_result.log


dj_crazy_joker 15-04-2012 19:24 1900226

Foreigner, спасибо, вопрос, как без сортирровки сохранять??
тоесть чтоб структура списка сохранялась

Iska 15-04-2012 20:09 1900239

dj_crazy_joker, я бы предложил использовать напрямую, без обработки коллеги, такое средство как Log Parser.

Ваш вариант:
Код:

"C:\Program Files\Log Parser 2.2\LogParser.exe" "SELECT DISTINCT Field1 FROM 'E:\Песочница\0135\0001.log'" -i:TSV -iSeparator:spaces -headerRow:OFF -q:ON
Результат…
Код:

62.122.135.154
172.21.221.26
180.61.12.95
178.178.1.237
193.68.70.2
94.229.71.155


dj_crazy_joker 15-04-2012 21:21 1900292

Iska, дело в том что мне не нужны крутые проги и т.д.
надо просто список айпи с моего сайта раз в неделю отправлять одному человеку
он сказал что такой завал который был у меня он не будет брать, тока после удаление повторов и т.д.

мне удобней через батник запускать всё эт дело и совсем не хочется замучиваться с этими прогами

dj_crazy_joker 16-04-2012 00:46 1900407

ещё вопрос как можно сделать чтоб он сохранял не просто заданным именем а датой

Anonymоus 16-04-2012 02:17 1900435

dj_crazy_joker, если вам не подходит метод Foreigner, попробуйте вот это. Но сразу предупрежу, скорость работы низкая, к примеру, лог с ~100 тысяч строк оно почти 8 минут обрабатывало, зато без сторонних утилит и порядок следования в логе не нарушается.

Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set Log=test.txt
:: Подсчитываем общее число строк для счетчика в заголовке окна
Set lines=0
For /F "usebackq" %%A In ("%Log%") Do (Set /A lines+=1)
:: Обрабатываем лог, выделяя IP и добавляя только не повторяющиеся
Set i=0
Set IPlist=
For /F "usebackq tokens=1" %%A In ("%Log%") Do (
        Echo !IPlist!|Find "%%A">nul||Set IPlist=!IPlist! %%A
        Set /A i+=1
        Title Progress: [!i!\%lines%]
)
:: Пишем IP в файл
For %%A In (%IPlist%) Do (Echo %%A>>%date%_IP_list.txt)


Iska 16-04-2012 03:18 1900440

Цитата:

Цитата dj_crazy_joker
мне удобней через батник запускать всё эт дело и совсем не хочется замучиваться с этими прогами »

Если Вы считаете, что единожды загрузить и установить одну, предназначенную специально для подобных случаев, утилиту, созданную непосредственно Microsoft, и затем использовать уже приведённый код — это означает «замучиваться» — что ж, дело Ваше.

Вот Вам результат выполнения команды для файла с миллионом строк (из предыдущего примера убран параметр «-q:ON», дабы отобразить статистику исполнения запроса):
Код:

E:\Песочница\0135>"C:\Program Files\Log Parser 2.2\LogParser.exe" "SELECT DISTINCT Field1 FROM 'E:\Песочница\0135\0001.log'" -iCodepage:1251 -i:TSV -iSeparator:spaces -headerRow:OFF

Field1
--------------
62.122.135.154
172.21.221.26
180.61.12.95
178.178.1.237
193.68.70.2
94.229.71.155

Statistics:
-----------
Elements processed: 1000000
Elements output:    6
Execution time:    1.78 seconds

Обратите внимание на значение «Execution time».

dj_crazy_joker 16-04-2012 11:49 1900577

Anonymоus, твой скрипт у меня закрывается сам где-то на середине

Foreigner 21-04-2012 16:08 1903737

Цитата:

Цитата dj_crazy_joker
вопрос, как без сортирровки сохранять?? »

Код:

@echo off
setlocal

0<access_result.log set /p "first="
1>access_result.tmp echo %first%

:loop
for /f "tokens=*" %%i in (' findstr /v /g:access_result.tmp access_result.log ') do 1>>access_result.tmp (echo %%i) && goto:loop
move access_result.tmp access_result.log



Время: 12:48.

Время: 12:48.
© OSzone.net 2001-