Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анализатор txt. логов атс, написание скрипта с выборкой по шаблону 
:(
    Опции темы
Uзверь
  Дата 6.10.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Всем еще раз большой привет smile  Продолжаю изучение перл актив.Пытаюсь запустить следующий скрипт прелоставленный мне <amg>

die "Usage: $0 log.txt\n" unless @ARGV;
while (<>) {
  m/^N/ || next;
  m/A97101(\d+)\s*$/ || next;
  $hash{$1}++;
}
foreach (sort {$a<=>$b} keys %hash) {
 print "По телефону  $_звонили $hash {$_} раз\n;
}

Я тут хотел еще спросить $0 здесь участвует как переменная служащяядля адаптации к операционной системе?
Как правильно понимать строчку foreach (sort {$a<=>$b} keys %hash)  точнее кусок с условием сортировки {$a<=>$b}. smile 
А в вайле как я понял нужно задать условие чтото вроде "время <число" 
Листая книги я просто не встретил примеров с вайлом где былобы <> такое вот
PM MAIL   Вверх
krypt3r
Дата 6.10.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 2
Всего: 16



Цитата

Я тут хотел еще спросить $0 здесь участвует как переменная служащяядля адаптации к операционной системе?

Ниасилил. $0 - это аналог argv[0] из C (имя запущенного скрипта). А этот скрипт вообще работает? Я не гуру перла, но должно быть что-то типа
Код

open my $F, '<', $ARGV[0] or die "open error: $!\n";
while (<$F>) {
...
}
close $F;

sort {$a<=>$b} keys %hash - сортирует ключи хэша %hash по возрастанию. Тогда внутри foreach переменная $_ будет содержать ключ хэша в данной итерации цикла.
Если не ошибаюсь, while (<>) - краткая запись while (<STDIN>) - скрипт будет ожидать ввода с клавы

Это сообщение отредактировал(а) krypt3r - 6.10.2009, 10:04
PM MAIL   Вверх
Uзверь
  Дата 6.10.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Парни а вот я такую попробывал написать как в книге писали 
вот код :
#!/usr/bin/perl
use strict;
#use varnings;
print"reed file st:\n";
open (RO,"ro.txt") or die "Canot open file st";
while (my $line=<RO>){
print "file: $line";
}

Там все тотже мой лог...
Пытаюсь прочитать все мультистрокой...да хоть как нибудь...
Но выдает сообщение О том что не может открыть файл который прописан 
и выбрасывает по кенот опен файл.
Хотя лог положил он должен видеть какжется так как он на томже диске что и перл.?
 smile 
PM MAIL   Вверх
amg
Дата 6.10.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(krypt3r @  6.10.2009,  09:59 Найти цитируемый пост)
Ниасилил. $0 - это аналог argv[0] из C (имя запущенного скрипта). А этот скрипт вообще работает? Я не гуру перла, но должно быть что-то типа
$0 - это действительно имя запущенного скрипта. Скрипт рабочий. Запущенный без параметров, выдает коротенькую подсказку. В нем используется оператор <>, который примерно и делает приведенный Вами код, но не только для $ARGV[0], а для всех файлов, перечисленных в @ARGV, или, если @ARGV пустой, то для входного потока.
PM MAIL   Вверх
Uзверь
  Дата 6.10.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Я опять если можно со своим вопросом...Почему у меня не запускается скрипт не один не другой в обоих случаях выдает что не иожет открыть требуемый файл...странно...Вродебы скрипто то небольшой и в дескрипторе вроде не ошибся.Может быть есть какие особые правила размещения рабочего файла?и тд...
PM MAIL   Вверх
krypt3r
Дата 6.10.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 2
Всего: 16



Я использую для чтения/обработки небольших файлов такой код
Код

open my $F, '<', 'file.txt' or die "open error: $!\n";
my @content = <$F>;
close $F;

Большие файлы лучше обрабатывать циклом
Код

open my $F, '<', 'file.txt' or die "open error: $!\n";
while (<$F>) {
  chomp;
  ...
}
close $F;

Для чтения файлов надо использовать символ < перед именем открываемого файла. В случае неудачи команды open сработает аварийный выход с выводом ошибки (переменная $!)
Ваш пример более грамотно надо записать так
Код

#!/usr/bin/perl
use strict;
use warnings;
#use diagnostics;

print "Reading file\n";
open my $RO, '<', "ro.txt" or die "Cannot open file: $!\n";
while (my $line = <$RO>) {
  # chomp $line;
  print "file: $line";
}
close $RO;


Это сообщение отредактировал(а) krypt3r - 6.10.2009, 11:24
PM MAIL   Вверх
amg
Дата 6.10.2009, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  6.10.2009,  09:13 Найти цитируемый пост)
Пытаюсь запустить следующий скрипт прелоставленный мне <amg>
Запускается он очень просто. Предположим, файл скрипта называется script.pl, а лог-файл -- log.txt. Тогда командная строка будет такой:
perl script.pl log.txt
Все три компоненты -- с полными путями, если необходимо.

PM MAIL   Вверх
Uзверь
  Дата 6.10.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Благодарю за подробное обьяснение парни! smile Щас все испробую!
PM MAIL   Вверх
Uзверь
  Дата 6.10.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



да вот чтото опять выдает что нет такого файла в директории...
Запускаю через командную строку perl script.pl log.txt 
нехочет... smile 
PM MAIL   Вверх
amg
Дата 6.10.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  6.10.2009,  11:36 Найти цитируемый пост)
опять выдает что нет такого файла в директории...
Значит, нужно все файлы указать с полными путями!
Или сложить их в текущую директорию.

Вообще, опиши ПОДРОБНО, что и как ты делаешь. Например, cmd вызываешь?


Это сообщение отредактировал(а) amg - 6.10.2009, 11:46
PM MAIL   Вверх
Uзверь
Дата 6.10.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Вот пробую запустить этот код!
Хочу прочитать содержимое файла тхт строкой.
Код:
#!/usr/bin/perl
use strict;
use warnings;
#use diagnostics;
print "Reading file\n";
open my $RO, '<', "ro.txt" or die "Cannot open file: $!\n";
while (my $line = <$RO>) {
  # chomp $line;
  print "file: $line";
}
close $RO;

Перл лежить на C:\Perl\bin
Логфайл лежит C:\ro.txt
Команда вызова из командной строки perl script.pl ro.txt

Шас с полными путями заряжу...
Вобщето немного както странновато получается...Открывая командную строку у меня ничего не запускается...А вот пользуясь редактором DzSoft Perl Editor для перл а точнее встроенной в него опцией выхода в командную строку с автоматическим запуском скрипта ...получается только скрипты с оператором STDIN запускать и вводить значения с экрана. Для проверки работоспособности софта попробывал это сделать.



Это сообщение отредактировал(а) Uзверь - 6.10.2009, 12:23
PM MAIL   Вверх
krypt3r
Дата 6.10.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 2
Всего: 16



Команда perl script.pl ro.txt сработает, если все 3 файла лежат в текущем каталоге. Запускайте так
Код

C:\Perl\bin\perl.exe script.pl C:\ro.txt

Маленький совет - поместите путь к файлу perl.exe в переменную окружения PATH
PM MAIL   Вверх
Uзверь
Дата 6.10.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



мда...знатьбы ещё как она выглядит и с чем её едят... smile 
PM MAIL   Вверх
amg
Дата 6.10.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(Uзверь @  6.10.2009,  13:16 Найти цитируемый пост)
мда...знатьбы ещё как она выглядит и с чем её едят...
Если мне память не изменяет, Active Perl при установке предлагает добавить perl.exe в переменную окружения PATH, и если от этого специально не отказаться, то добавит (а может, и без спросу добавляет).

Uзверь, попробуй действовать так:
1. Создай какую-нибудь папку, скажем, tmp на диске C:
2. Скопируй в эту папку файл скрипта и файл лога
3. Запусти cmd. Разные способы, например:
 -  зайти Total Commander'ом в или far'ом эту папку и в его командной строке набрать cmd 
 -  вызвать cmd через Alt F2 в нем перейти в нужное место, исполнив C: и cd tmp
4. в cmd набрать perl script.pl ro.txt (в cmd стрелка вверх вызывает предыдущую команду, так что много раз ее набирать не придется).

ЗЫ Заранее извиняюсь, если говорю тривиальные вещи.
PM MAIL   Вверх
Uзверь
Дата 6.10.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.9.2009

Репутация: нет
Всего: нет



Еслибы тривиальные...Ато ведь все новое и неизведанное... smile  щас буду пробывать.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1334 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.