2015-12-17 2 views
2

Вот мой Perl фрагмент кодав реальном времени штамп в PERL код

if($line =~ m/^Warning: (.*)$/){ 
       $subStepValues = { 
        Warning => $1, 
        Warning_timeStamp => `date`, 
       }; 
       push @{$subsSteps->{'subStepValues'}}, $subStepValues; 
} 

Я разборе выход хвоста -f из файла в мой PERL код, и я действительно заинтересован, чтобы получить реальное от времени идут штамп, в настоящее время некоторые как выполнение date не работает любое другое лучшее предложение?

+0

Мое понимание этого кода в том, что он должен назначать разную метку времени для ввода в разное время, но каким-то образом я получаю одинаковый штамп времени по всем значениям - действительно нужна помощь Я пробовал с функцией gmtime() и даже strftime (" % Y -% m -% dT% H:% M:% S ", местное время), ничего действительно не работает. – Shantesh

ответ

2

Как насчет красивой метки времени ISO?

use POSIX qw(strftime); 

if ($line =~ m/^Warning: (.*)$/) 
{ 
    $subStepValues = { 
     Warning => $1, 
     Warning_timeStamp => strftime("%Y-%m-%dT%H:%M:%S", localtime), 
    }; 
    push @{$subsSteps->{'subStepValues'}}, $subStepValues; 
} 

Вот простое доказательство концепции из командной строки, используя пустой файл и работает хвост -f на него, а затем переходя к другому терминалу и добавив несколько строк к нему в порядке echo something >> log

[email protected] 12-18T1:57:23 338> touch log 
[email protected] 12-18T1:57:26 339> tail -f log | perl -lne 'BEGIN{use POSIX qw(strftime);}chomp; printf "%s -- %s\n", strftime("%Y-%m-%dT%H:%M:%S", localtime), $_;' 
2015-12-18T01:57:40 -- hello 
2015-12-18T01:57:46 -- line 2 
2015-12-18T01:57:50 -- line 3 
+1

FYI вы можете сократить эту строку формата до '%%%% T ''. Опция '% F' доступна не на всех платформах. –

+0

@Ken Schumack. Я получаю эту ошибку ниже Использование: POSIX :: strftime (fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at watcher_instance_8 .pl строка 229, строка 106. – Shantesh

+0

Привет @Shantesh Вы использовали localtime в вызове strftime()? localtime на самом деле является функцией Perl, а не переменной, которую я составил. Возможно, я должен был использовать 'localtime()', чтобы быть более четким. Например: 'print strftime («% Y-% m-% dT% H:% M:% S », localtime) '' дает 2015-12-18T01: 22: 41 'print strftime ("% Y-% m =% dT% H:% M:% S ", junk) '' дает ошибку: Использование: POSIX :: strftime (fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) при -e строке 1.' –

Смежные вопросы