CMD/BAT - Удаление повторяющихся айпи

Ответить
Аватара пользователя
dj_crazy_joker

CMD/BAT - Удаление повторяющихся айпи

Сообщение dj_crazy_joker »

Прошу помощи есть веб сервер на локал машине

там оч большие логи



Код:

Код: Выделить всё

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

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение Foreigner »

Цитата dj_crazy_joker:



нужно удалять повторы
CMD/BAT - Удаление повторяющихся айпи






Код:

Код: Выделить всё

@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

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение dj_crazy_joker »

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

тоесть чтоб структура списка сохранялась
Аватара пользователя
Iska

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение Iska »

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

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение dj_crazy_joker »

Iska, дело в том что мне не нужны крутые проги и т.д.

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

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



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

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение dj_crazy_joker »

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

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение Гость »

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

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение Iska »

Цитата dj_crazy_joker:



мне удобней через батник запускать всё эт дело и совсем не хочется замучиваться с этими прогами
CMD/BAT - Удаление повторяющихся айпи




Если Вы считаете, что единожды загрузить и установить одну, предназначенную специально для подобных случаев, утилиту, созданную непосредственно 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

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение dj_crazy_joker »

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

Re: CMD/BAT - Удаление повторяющихся айпи

Сообщение dj_crazy_joker »

Цитата dj_crazy_joker:



вопрос, как без сортирровки сохранять??
CMD/BAT - Удаление повторяющихся айпи






Код:

Код: Выделить всё

@echo off
setlocal
0access_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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»