PDA

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


dj_crazy_joker
15-04-2012, 16:40
Прошу помощи есть веб сервер на локал машине
там оч большие логи
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
нужно удалять повторы »

@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
Foreigner, спасибо, вопрос, как без сортирровки сохранять??
тоесть чтоб структура списка сохранялась

Iska
15-04-2012, 20:09
dj_crazy_joker, я бы предложил использовать напрямую, без обработки коллеги, такое средство как Log Parser (http://technet.microsoft.com/ru-ru/scriptcenter/dd919274).

Ваш вариант:
"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
Iska, дело в том что мне не нужны крутые проги и т.д.
надо просто список айпи с моего сайта раз в неделю отправлять одному человеку
он сказал что такой завал который был у меня он не будет брать, тока после удаление повторов и т.д.

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

dj_crazy_joker
16-04-2012, 00:46
ещё вопрос как можно сделать чтоб он сохранял не просто заданным именем а датой

Anonymоus
16-04-2012, 02:17
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
мне удобней через батник запускать всё эт дело и совсем не хочется замучиваться с этими прогами »
Если Вы считаете, что единожды загрузить и установить одну, предназначенную специально для подобных случаев, утилиту, созданную непосредственно 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
Anonymоus, твой скрипт у меня закрывается сам где-то на середине

Foreigner
21-04-2012, 16:08
вопрос, как без сортирровки сохранять?? »

@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




© OSzone.net 2001-2012