perl - очистка данных (help)

Модератор: Модераторы разделов

Аватара пользователя
kusok
Сообщения: 306
Статус: laid to rest
ОС: Debian Sid

perl - очистка данных

Сообщение kusok »

Имеется такой кусок текстового файла:

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

 Tue Mar 28 21:25:23 2006
 Tue Mar 28 22:00:59 2006
 Tue Mar 28 22:00:59 2006
 Tue Mar 28 22:09:42 2006
 Errors in file d:\oracle\admin\jvl\udump\jvl_j000_687.trc:
 ORA-12012: ошибка при автоисполнении задания 90
 ORA-01418: заданного индекса не существует
 ORA-06512: на  "DBO.PCK_ADMIN", line 462
 ORA-06512: на  line 1
 Tue Mar 28 22:09:42 2006
 Tue Mar 28 22:09:42 2006
 Tue Mar 28 22:09:42 2006
 Tue Mar 28 22:14:09 2006
 Tue Mar 28 22:14:09 2006
 Tue Mar 28 22:14:09 2006
 Tue Mar 28 22:14:09 2006
 Wed Mar 29 02:42:06 2006
 Errors in file d:\oracle\admin\jvl\udump\jvl_j000_687.trc:
 ORA-12012: ошибка при автоисполнении задания 90
 ORA-01418: заданного индекса не существует
 ORA-06512: на  "DBO.PCK_ADMIN", line 462
 ORA-06512: на  line 1
 Wed Mar 29 04:04:44 2006
 Wed Mar 29 04:04:44 2006
 Wed Mar 29 09:13:04 2006
 Wed Mar 29 09:13:04 2006

Как бы это дело обработать, чтобы осталось следующее?

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

 Tue Mar 28 22:09:42 2006
 Errors in file d:\oracle\admin\jvl\udump\jvl_j000_687.trc:
 ORA-12012: ошибка при автоисполнении задания 90
 ORA-01418: заданного индекса не существует
 ORA-06512: на  "DBO.PCK_ADMIN", line 462
 ORA-06512: на  line 1

 Wed Mar 29 02:42:06 2006
 Errors in file d:\oracle\admin\jvl\udump\jvl_j000_687.trc:
 ORA-12012: ошибка при автоисполнении задания 90
 ORA-01418: заданного индекса не существует
 ORA-06512: на  "DBO.PCK_ADMIN", line 462
 ORA-06512: на  line 1

Вообще, нужен именно алгоритм обработки, уже полдня думаю, никак придумать не могу. Есть идеи?
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl - очистка данных

Сообщение madskull »

Обязательно перл? Грепом очень просто:

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

grep -B1 -A4 'Errors in file' file
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl - очистка данных

Сообщение madskull »

можно и на перле, конечно.

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


perl -we 'while(<>){if($p){$p=/^ORA/and print or print"\n"}if(/^Errors/){$p=print$s}$s=$_}' file

:rolleyes:

Смысл - при появлении строки Errors выставляем флаг, что надо выводить последующие строки ($p) и вывести предыдущую строку, которую мы пихаем в $s на каждой итерации.
Когда встречается строка с ORA - выводим ее.
НЕ с ORA - выводим перевод строки и сбрасываем флаг.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
kusok
Сообщения: 306
Статус: laid to rest
ОС: Debian Sid

Re: perl - очистка данных

Сообщение kusok »

Да, перлом обязательно, т.к. это только малая часть всего действа :)
Плюс ещё надо обеспечить совсместимость с вендой.

2 madskull
Большое Спасибо!
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: perl - очистка данных

Сообщение sergius »

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

#!/usr/bin/perl -w

while (<>) {
    unless (/\d\d:\d\d:\d\d/) {
        /^Errors/? print "\n".$s.$_ : print $_;
        next;
    }
    $s = $_;
}
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl - очистка данных

Сообщение madskull »

sergius А если в описании ошибки (после ORA-...) будет время или что-то еще, попадающее под регексп \d\d:\d\d:\d\d ?

(а вообще так и хочется устроить перл-гольф :) )
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: perl - очистка данных

Сообщение sergius »

madskull писал(а):
29.03.2006 21:12
sergius А если в описании ошибки (после ORA-...) будет время или что-то еще, попадающее под регексп \d\d:\d\d:\d\d ?

"/^(\w){3} (\w){3} \d\d \d\d:\d\d:\d\d (\d){4}$/"
:)

(а вообще так и хочется устроить перл-гольф :) )

Я за! :boxing:


ЗЫ Вау! я набрал 500 постов B)
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl - очистка данных

Сообщение madskull »

sergius писал(а):
30.03.2006 10:33

(а вообще так и хочется устроить перл-гольф :) )

Я за! :boxing:

Тогда на:

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

while(<>){/^OR/&&print;/^E/&&print"\n".$s.$_;$s=$_}

Конечно, при условии, что в логах строки начинаются либо с даты, либо, при ошибке, со слова Error и ORA.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl - очистка данных

Сообщение madskull »

Или, вообще без while, если запускать:

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

perl -wne '/^OR/&&print;/^E/&&print"\n".$s.$_;$s=$_' file
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: perl - очистка данных

Сообщение sergius »

Под виндой работать не будет. Надо так: ;)
Никс:

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

perl -wne '/^OR/?print:/^E/&&print"\n$s$_";$s=$_' file


Вынь:

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

perl -wne "/^OR/?print:/^E/&&print\"\n$s$_\";$s=$_" file
Спасибо сказали:
Nab
Сообщения: 257

Re: perl - очистка данных

Сообщение Nab »

Попытка номер РАЗ:

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

perl -wne "s/^E/\n$s$&/&&print;/^O/&&print;$s=$_" file



Попытка номер ДВА:

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

perl -wne "(/^O/||s/^E/\n$s$&/)&&print;$s=$_" file


И еще -1 :)

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

perl -wne "/^O/||s/^E/\n$s$&/?print:($s=$_)" file
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: perl - очистка данных

Сообщение sergius »

Nab писал(а):
31.03.2006 07:10
Попытка номер РАЗ:

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

perl -wne "s/^E/\n$s$&/&&print;/^O/&&print;$s=$_" file

Попытка номер ДВА:

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

perl -wne "(/^O/||s/^E/\n$s$&/)&&print;$s=$_" file

И еще -1 :)

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

perl -wne "/^O/||s/^E/\n$s$&/?print:($s=$_)" file


:clap:
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl - очистка данных

Сообщение madskull »

Nab писал(а):
31.03.2006 07:10
Попытка номер РАЗ:

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

perl -wne "s/^E/\n$s$&/&&print;/^O/&&print;$s=$_" file

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

[arena tmp]$ perl -wne "s/^E/\n$s$&/&&print;/^O/&&print;$s=$_" file
Unquoted string "file" may clash with future reserved word at -e line 1.
syntax error at -e line 1, near ";="
Execution of -e aborted due to compilation errors.
[arena tmp]$


Nab писал(а):
31.03.2006 07:10
Попытка номер ДВА:

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

perl -wne "(/^O/||s/^E/\n$s$&/)&&print;$s=$_" file

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

[arena tmp]$ perl -wne "(/^O/||s/^E/\n$s$&/)&&print;$s=$_" file
Unquoted string "file" may clash with future reserved word at -e line 1.
syntax error at -e line 1, near ";="
Execution of -e aborted due to compilation errors.
[arena tmp]$


Nab писал(а):
31.03.2006 07:10
И еще -1 :)

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

perl -wne "/^O/||s/^E/\n$s$&/?print:($s=$_)" file

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

[arena tmp]$ perl -wne "/^O/||s/^E/\n$s$&/?print:($s=$_)" file
Unquoted string "file" may clash with future reserved word at -e line 1.
syntax error at -e line 1, near "(="
Execution of -e aborted due to compilation errors.
[arena tmp]$


Кроме того, на /^O/ может выловиться и Oct...
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: perl - очистка данных

Сообщение madskull »

Ой, забыл дописать:

Nab Вообще-то, конечно, здорово.
ArchLinux / IceWM
Спасибо сказали:
Nab
Сообщения: 257

Re: perl - очистка данных

Сообщение Nab »

Первым идет день недели, на сколько я понял....
хотя формат логов может быть конечно и изменен, но этого в условии не было...

Ну а по всем пунктам виноват однако, кавычки одинарные надоть

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

perl -wne '/^O/||s/^E/\n$s$&/?print:($s=$_)' file


PS: Ой забыл ответить, спасибо конешно :)
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: perl - очистка данных

Сообщение sergius »

madskull писал(а):
31.03.2006 10:44
Кроме того, на /^O/ может выловиться и Oct...

Я тоже об этом подумал, но первый - неделя. Никуда не денешься.


Nab писал(а):
31.03.2006 11:01
Ну а по всем пунктам виноват однако, кавычки одинарные надоть

Одинарные кавычки не будут работать в винде. По условию должна работать и в линуксе, и в винде!
Такчто тут два варианта. С одинарными и двойными ;)
Спасибо сказали:
Nab
Сообщения: 257

Re: perl - очистка данных

Сообщение Nab »

sergius писал(а):
31.03.2006 11:15
Nab писал(а):
31.03.2006 11:01

Ну а по всем пунктам виноват однако, кавычки одинарные надоть

Одинарные кавычки не будут работать в винде. По условию должна работать и в линуксе, и в винде!
Такчто тут два варианта. С одинарными и двойными ;)

Ну в принципе эт не важно, скорей всего это будет в файл заворачиваться, то есть в while, а там кавычки будут одинаковые - фигурные :)
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: perl - очистка данных

Сообщение sergius »

Мда, короче не могу придумать :(

Можно (наверно) объявить победителя! Nab :1a:

ЗЫ Может еще что-нить распарсим? :boxing:
Спасибо сказали:
Nab
Сообщения: 257

Re: perl - очистка данных

Сообщение Nab »

sergius писал(а):
31.03.2006 14:42
Мда, короче не могу придумать :(

Можно (наверно) объявить победителя! Nab :1a:

Может не стоит спешить, народ у нас талантливый...
sergius писал(а):
31.03.2006 14:42
ЗЫ Может еще что-нить распарсим? :boxing:

Да пожалста, а кто задачку придумает?
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали: