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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шел-скриптинг 
:(
    Опции темы
Loki
Дата 9.7.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нужно предсатвить формат даты из вида 
CCYY-MM-DD hh:mm:ss.000000000
в вид
MMDDhhmmCCYY.ss

В перлах я не очень, но на *sh точно такое не реализовать.
DT=`ls -l -F --full-time date.sh | awk '{print $6 "" $7 "" $8}'`; echo $DT
в шеле даёт вывод
2006-07-0916:39:34.000000000+0400
мне это нужно перевести в 
date 070916392006.34
Код
#!/usr/bin/perl
use strict;
my $DT=`ls -l -F --full-time date.sh | awk '{print $6 "" $7 "" $8}'`;
open (STDIN, "$DT") or die "$!\n";
perl -ane '/^(.+)(\d{4})-(\d\d)-(\d\d)\s+(\d\d):(\d\d):(\d\d)(.+)/;
($pref, $CCYY, $MM, $DD, $hh, $mm, $ss, $suff) = ($1, $2, $3, $4, $5, $6, $7, $8);
DT=`ls -l -F --full-time date.sh | awk '{print $6 "" $7 "" $8}'`;
date "$MM$DD$hh$mm$CCYY.$ss$suff\n"'


Листинг ошибки:
Код

./test.sh
Unquoted string "perl" may clash with future reserved word at ./test.sh line 4.
String found where operator expected at ./test.sh line 6, near "print "$pref, $MM$DD$hh$mm$CCYY.$ss$suff\n"'"
  (Might be a runaway multi-line '' string starting on line 4)
        (Missing semicolon on previous line?)
syntax error at ./test.sh line 6, near "print "$pref, $MM$DD$hh$mm$CCYY.$ss$suff\n"'"
Execution of ./test.sh aborted due to compilation errors.

что не так?
__
заранее благодарен! 

Это сообщение отредактировал(а) Loki - 9.7.2006, 16:07
PM MAIL   Вверх
sharq
Дата 10.7.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

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



Loki, 
Цитата(Loki @  9.7.2006,  17:06 Найти цитируемый пост)
что не так?

в Perl нет командв perl  smile 

Код

use strict;

my $date = '2006-07-09 16:39:34.000000000+0400';
(my $new = $date) =~ s/^ (\d{2}\d{2}) - (\d{2}) - (\d{2}) \  (\d{2}) : (\d{2}) : (\d{2}) \. .* $/$2$3$4$5$1.$6/x;
print $new;

__END__
CCYY-MM-DD hh:mm:ss.000000000
в вид
MMDDhhmmCCYY.ss


 smile  


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Loki
Дата 11.7.2006, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



спасибо, ситуация немного прояснилась, но всё же теперь кот в чём косяк...
При выполнении:
Код

./date.sh
date

А должно date дата последнего изменения файла, которая в переменной $DT, только приобразованная в другой формат...
Мой код:
Код

#!/usr/bin/perl
use strict;
my $DT=`ls -l -F --full-time /root/date.sh | awk '{print $6 "" $7 "" $8}'`;
#open (STDIN, "$DT") or die;
(my $new = $DT)=~ s/^ (\d{2}\d{2})-(\d{2})-(\d{2}) \ (\d{2}) : (\d{2}) : (\d{2}) \. .* $/$2$3$4$5$1.$6/x;
print "date $new";
  

Это сообщение отредактировал(а) Loki - 11.7.2006, 07:56
PM MAIL   Вверх
sharq
Дата 11.7.2006, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

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



Loki, 

Цитата(Loki @  11.7.2006,  08:53 Найти цитируемый пост)
./date.sh

скрипт должен называть date.pl  smile 

Цитата(Loki @  11.7.2006,  08:53 Найти цитируемый пост)
my $DT=`ls -l -F --full-time /root/date.sh | awk '{print $6 "" $7 "" $8}'`;

Возращает без пробела между датой и времени, а ты указывал формат с пробелом
Цитата(Loki @  9.7.2006,  17:06 Найти цитируемый пост)
CCYY-MM-DD hh:mm:ss.000000000

 smile 

Поэтому вот:
Код

#!/usr/bin/perl
use strict;
my $DT=`ls -l -F --full-time /root/date.sh | awk '{print $6 "" $7 "" $8}'`;
#open (STDIN, "$DT") or die;
(my $new = $DT)=~ s/^ (\d{2}\d{2})-(\d{2})-(\d{2}) (\d{2}) : (\d{2}) : (\d{2}) \. .* $/$2$3$4$5$1.$6/x;
print "date $new";


А я вообще бы это сделал так:
Код

ls -l -F --full-time ./mysql.pl | perl -ane 'print "$F[5]$F[6]$F[7]"' | ./date.pl


date.pl
Код

#!/usr/bin/perl
local $/;
for (<>) {
    print "old: $_\n";
    s/^ (\d{2}\d{2}) - (\d{2}) - (\d{2}) (\d{2}) : (\d{2}) : (\d{2}) \. .* $/$2$3$4$5$1.$6/x;
    print "new: $_\n";
}


 smile 

  

Это сообщение отредактировал(а) sharq - 11.7.2006, 11:34


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Loki
Дата 12.7.2006, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



sharq
Спасибо!
Ещё еще несколько вопросов...
Как можно сделать на шел(bash) или на перл чтобы была проверка на наличие файла и его размера.
Т.е. нужно проверять размер файла и сравнивать с заданным значением? Если же что-то не так то выполнять определённые действия(но с этим проблемы не будет).

Как сделать так чтобы отсылались уведомления на e-mail о проделынных действиях и их завершении?

Как всё это сделать с слежением в реалтайме(типо при достижении определённого времяни запускать/останавливать), но при том чтобы это не съедало всё процессорное время?
__
заранее благодарен! 
PM MAIL   Вверх
sharq
Дата 12.7.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

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



Loki, 
Цитата(Loki @  12.7.2006,  05:38 Найти цитируемый пост)
Как можно сделать на шел(bash) или на перл чтобы была проверка на наличие файла и его размера.
Т.е. нужно проверять размер файла и сравнивать с заданным значением? Если же что-то не так то выполнять определённые действия(но с этим проблемы не будет).


Код

my $file = '/path/file.pl';
my $quote = 10;
if (-f $file && (my $length = -s $file) > $quote) {
  ...
} else {
  ...
}



Цитата(Loki @  12.7.2006,  05:38 Найти цитируемый пост)

Как сделать так чтобы отсылались уведомления на e-mail о проделынных действиях и их завершении?

Использовать sendmail, для чего можно использовать готовые модули, посмотри здесь.

Цитата(Loki @  12.7.2006,  05:38 Найти цитируемый пост)
Как всё это сделать с слежением в реалтайме(типо при достижении определённого времяни запускать/останавливать), но при том чтобы это не съедало всё процессорное время?

Можешь запускать скрипт по cron'у и следить за этим.

 smile 
 


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Loki
Дата 12.7.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

А я вообще бы это сделал так:
Код

ls -l -F --full-time ./mysql.pl | perl -ane 'print "$F[5]$F[6]$F[7]"' | ./date.pl


date.pl
Код

#!/usr/bin/perl
local $/;
for (<>) {
    print "old: $_\n";
    s/^ (\d{2}\d{2}) - (\d{2}) - (\d{2}) (\d{2}) : (\d{2}) : (\d{2}) \. .* $/$2$3$4$5$1.$6/x;
    print "new: $_\n";
}



# ls -l -F --full-time date.sh | perl -ane 'print "$F[5]$F[6]$F[7]"' | date.pl
-bash: date.pl: command not found
Цитата

Код

my $file = '/path/file.pl';
my $quote = 10;
if (-f $file && (my $length = -s $file) > $quote) {
  ...
} else {
  ...
}


Тут
$file - путь к файлу
$quote - что такое?
$length - размер файла?
Цитата

Использовать sendmail, для чего можно использовать готовые модули, посмотри здесь.
Можешь запускать скрипт по cron'у и следить за этим.

Нет, использовать что- либо не представляет быть возможным smile 
Как это решить более автономно?
 
PM MAIL   Вверх
Basteon
Дата 12.7.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уф, с датой разобрался=) 
PM MAIL   Вверх
DENNN
Дата 12.7.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



Цитата(Loki @  12.7.2006,  14:31 Найти цитируемый пост)
Цитата

Использовать sendmail, для чего можно использовать готовые модули, посмотри здесь.
Можешь запускать скрипт по cron'у и следить за этим.

Нет, использовать что- либо не представляет быть возможным smile 
Как это решить более автономно?
  

не надо привязываться к почтовику. Лучше попробывать использовать встроенную юниксовую команду mail
 
PM ICQ   Вверх
Loki
Дата 12.7.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот что-то вроде того...
Код

H=`date "+%H"
while [ "0$H">01, "0$H"<07 ];do sleep 600 
...
done

но не рабоатет;-\
Цитата
не надо привязываться к почтовику. Лучше попробывать использовать встроенную юниксовую команду mail

 smile   

Это сообщение отредактировал(а) Loki - 12.7.2006, 18:53
PM MAIL   Вверх
DENNN
Дата 12.7.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



пример с консоли:
Код

@www ~# mail [email protected]
Subject: test
helo everybody!
.
EOT
@www ~#

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


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

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


 




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


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

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