Страница 1 из 1

Нужна помощь в корректировке скрипта!

Добавлено: 2010-05-27 17:17:01
Ksadoo
Есть скрипт, который вытягивает из логов сквида ip, время, url... и заносит их в MySQL:

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

#!/bin/bash

cp /usr/local/squid/logs/access.log /tmp/squidforparse.log
>/usr/local/squid/logs/access.log
awk '{gsub (/PPPP%5C/, "")} {print "INSERT INTO squid (name,ip,bytes,link,trans,time) \
VALUES (\""$8"\",\""$3"\","$5",\""$7"\",\""$9"\",from_unixtime("$1"));"};' \
< /tmp/squidforparse.log | mysql -D traffics -u root --password=root
rm -f /tmp/squidforparse.log

Как его изменить так, что б в один столбец базы вносились только название домена который посещался, а во второй все поддомена в этом домене.
Помогите пожалуйста!

Re: Нужна помощь в корректировке скрипта!

Добавлено: 2010-05-28 10:41:50
Гость
не имел дела с mysql/squid, без понятия как там логи выглядят и какие ограничения на таблицы. Но что ты подразумеваешь под "все поддомена"? Ты хочешь в каждую ячейку вносить копию всех поддоменов кои встречались в логе или ссылку на другую таблицу?

ps, тебя будет легче понять, если ты предоставишь пример данных на ввод и пример данных на вывод.

Re: Нужна помощь в корректировке скрипта!

Добавлено: 2010-05-28 10:43:47
ADRE
дописать скрипт чтоб делил строку с урлом после /

Re: Нужна помощь в корректировке скрипта!

Добавлено: 2010-05-28 11:58:40
Ksadoo
Ок, вот пример лога сквида:

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

1275035155.097  147 192.168.200.2 TCP_MISS/200 6733 GET http://www.google.com.ua/ PPPP%5Cksadoo DIRECT/74.125.87.99 text/html
1275035228.118  234 192.168.200.2 TCP_MISS/200 14184 GET http://www.google.com.ua/search? PPPP%5Cksadoo DIRECT/74.125.87.99 text/html
.....
Сейчас работает так:

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

   1     |          2        |               3                                       
ksadoo   |   192.168.200.2   |   http://www.google.com
ksadoo   |   192.168.200.2   |   http://www.google.com/search?        
 

Нужно добавить 4-е поле и в него вносить только поддомена домена google и др. Тоесть:

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

  1      |          2        |               3           |        4               
ksadoo   |   192.168.200.2   |   http://www.google.com   |       --
ksadoo   |   192.168.200.2   |   http://www.google.com   |  http://www.google.com.ua/search?
ksadoo   |   192.168.200.2   |   http://www.google.com   |  http://www.google.com.ua/search?/1234/
ksadoo   |   192.168.200.2   |   http://www.bigmir.ua    |       --
ksadoo   |   192.168.200.2   |   http://www.bigmir.ua    |  http://www.bigmir.ua/video/
4-е поле добавить не проблема, а вот как сделать такое распределение не знаю. Как сказал ADRE мне нужно дописать скрипт, который делил бы строку после "/"; проблема в том, что я не знаю как это сделать, вот и обратился за помощью!
Буду очень благодарен хотя бы за приблизительное обьяснение того, как такое можно сделать. :smile:

Re: Нужна помощь в корректировке скрипта!

Добавлено: 2010-05-28 17:32:04
Гость
разбей с помощью функции split()

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

$ awk '{ gsub(/PPPP%5C/, ""); split($7,a,"/"); print a[3] }' твой_лог.txt
www.google.com.ua
www.google.com.ua
сам сможешь воткнуть в нужное место?

кроме split() можно также менять значения FS, но тогда результат предсказать сложнее

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

awk '{ gsub(/PPPP%5C/, ""); FS="/"; print $4  }' твой_лог.txt
www.google.com.ua
www.google.com.ua

$ awk '{ gsub(/PPPP%5C/, ""); print $4; FS="/" }' твой_лог.txt
TCP_MISS/200
www.google.com.ua

Re: Нужна помощь в корректировке скрипта!

Добавлено: 2010-05-28 22:15:04
buryanov
можно сделать это средствами мускула
если вам нужно выкинуть всё, что после имени сервера - то делается так:

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

SUBSTRING_INDEX('http://www.google.com.ua/search?/123','/',3);
в результате вы получите

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

http://www.google.com.ua
вместо 'http://www.google.com.ua/search?/123' поставляете свою переменную № поля

Re: Нужна помощь в корректировке скрипта!

Добавлено: 2010-05-29 2:19:30
Burner
а не проще поставить обычную парсилку - sarg, free-sa?

Re: Нужна помощь в корректировке скрипта!

Добавлено: 2010-05-31 12:13:23
Ksadoo
Всем огромное СПАСИБО! Воспользовался вариантом со "split"!