![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
witos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
помогите чайнику, который только начал разбираться с perl...
Есть лог-файл следующего вида: Sun Mar 19 23:18:54 YEKT 2006 ppp3 10.6.20.250 LOGIN Sun Mar 19 23:32:27 YEKT 2006 ppp3 10.6.20.250 LOGOUT Mon Mar 20 19:49:45 YEKT 2006 ppp3 10.6.20.250 LOGIN Mon Mar 20 20:28:25 YEKT 2006 ppp3 10.6.20.250 LOGOUT Tue Mar 21 20:52:02 YEKT 2006 ppp3 10.6.20.250 LOGIN Tue Mar 21 20:52:06 YEKT 2006 ppp3 10.6.20.250 LOGOUT Tue Mar 21 20:52:25 YEKT 2006 ppp3 10.6.20.250 LOGIN Tue Mar 21 20:54:05 YEKT 2006 ppp5 10.6.20.240 LOGIN Tue Mar 21 20:56:01 YEKT 2006 ppp5 10.6.20.240 LOGOUT Tue Mar 21 20:56:33 YEKT 2006 ppp3 10.6.20.250 LOGOUT Tue Mar 21 20:58:46 YEKT 2006 ppp3 10.6.20.250 LOGIN Tue Mar 21 21:37:17 YEKT 2006 ppp3 10.6.20.250 LOGOUT нужно занести данные в файл, чтоб строки выглядели так - " IP-адрес pppX login_date_time logout_date_time", т.е. как сделать из 2-х записей в исходном лог-файле (вход и выход) одну в другом файле со временем и входа, и выхода? ( т.е. чтоб получить записи вида: 10.6.20.250 ppp3 19.03.2006 23:18:54 19.03.2006 23:32:27 10.6.20.250 ppp3 20.03.2006 19:49:45 20.03.2006 20:28:25 и т.д.) |
|||
|
||||
DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 1 Всего: 13 |
нужно что то типа такого.... это работать не будет, но если подкорректировать, то можно добиьбся результата ![]() Это сообщение отредактировал(а) DEER - 22.3.2006, 14:49 -------------------- |
|||
|
||||
witos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
хорошо, попробую подкорректировать
|
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Вот держи на скорую руку (рабочий но глупый):
Это сообщение отредактировал(а) nitr - 22.3.2006, 21:31 |
|||
|
||||
DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 1 Всего: 13 |
nitr, но не факт, что записи подключения\отключения идут поочереди
![]() -------------------- |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Этот скрипт можно улучшить, у меня щас времени нет. Я написал на скорую руку. Твой код не проверял
![]() |
|||
|
||||
witos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
DEER, это правильно подмечено, поэтому
слегка изменил код nitr, по результатам вроде похоже на правильный вид... #!/usr/bin/perl -w use strict; my $filein = 'vpn.log'; my $fileout = 'my.log'; my ($login_date, $logout_date, $ppp, $ip); open OUT, ">$fileout"; open LOG, "<$filein"; while(<LOG>) { if(m/(\w+\s\w+\s\d*\s\d*\:\d*\:\d*).*?(ppp.)\s((\d*\.){3}\d*)\sLOGIN/) { $login_date = $1; $ppp = $2; $ip = $3; } if ((m/(\w*\s\w*\s\d*\s\d*\:\d*\:\d*).*?(ppp.)\s(\d*\.){3}\d*\sLOGOUT/) and ($ppp eq $2)) { $logout_date = $1; print OUT "$ip $ppp $login_date $logout_date\n"; } } close(LOG); close(OUT); тогда остаётся только дату привести в красивый вид... |
|||
|
||||
avral |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 9.3.2006 Репутация: нет Всего: нет |
Tue Mar 21 20:52:25 YEKT 2006 ppp3 10.6.20.250 LOGIN
Tue Mar 21 20:54:05 YEKT 2006 ppp5 10.6.20.240 LOGIN Tue Mar 21 20:56:01 YEKT 2006 ppp5 10.6.20.240 LOGOUT Tue Mar 21 20:56:33 YEKT 2006 ppp3 10.6.20.250 LOGOUT для приведенного отрезка данных с вышеуказанным кодом теряется запись для ррр3, т. к. переменым будут присвоенны данные от ррр5. необходимо данные ввести в массив |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
А можно предварительно лог-файл обработать и сделать чтобы по порядку записи были
![]() |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: нет Всего: 40 |
Я бы сделал так:
Вот результат который получился на вашем примере: 10.6.20.250 ppp3 Mar 19 23:18:54 - Mar 19 23:32:27 10.6.20.250 ppp3 Mar 20 19:49:45 - Mar 20 20:28:25 10.6.20.250 ppp3 Mar 21 20:52:02 - Mar 21 20:52:06 10.6.20.240 ppp5 Mar 21 20:54:05 - Mar 21 20:56:01 10.6.20.250 ppp3 Mar 21 20:52:25 - Mar 21 20:56:33 10.6.20.250 ppp3 Mar 21 20:58:46 - Mar 21 21:37:17 Это сообщение отредактировал(а) Бонифаций - 23.3.2006, 13:03 -------------------- Бонифаций. |
|||
|
||||
witos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
И правда, что ранее написаный код терял записи....
Спасибо Бонифаций, ваш код на самом деле выдал правильный результат! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |