Я пытаюсь написать скрипт Perl, который анализирует журнал, где на каждой строке второе значение - дата. Скрипт принимает три аргумента: входной файл журнала, время начала и время окончания. Время начала и окончания используется для анализа определенного значения на каждой строке, которое находится между этими двумя моментами. Но для правильного запуска этого я конвертирую время начала и окончания в эпоху. Проблема, с которой я столкнулась, заключается в том, чтобы преобразовать значение цикла i в нормальное время для сравнения с файлом журнала. После запуска localtime($i)
Я печатаю значение и вижу только ссылку, напечатанную не фактическое значение.Как преобразовать время в обычное время в Perl?
Вот сценарий, я до сих пор (это работа в процессе):
#!/usr/bin/perl
use strict;
use warnings;
use Time::Local;
use Time::localtime;
use File::stat;
my $sec = 0;
my $min = 0;
my $hour = 0;
my $mday = 0;
my $mon = 0;
my $year = 0;
my $wday = 0;
my $yday = 0;
my $isdst = 0;
##########################
# Get the engine log date
##########################
my $date = `grep -m 1 'Metric' "$ARGV[0]" | awk '{print \$2}'`;
($year,$mon,$mday) = split('-', $date);
$mon--;
#########################################
# Calculate the start and end epoch time
#########################################
($hour,$min,$sec) = split(':', $ARGV[1]);
my $startTime = timelocal($sec,$min,$hour,$mday,$mon,$year);
($hour,$min,$sec) = split(':', $ARGV[2]);
my $endTime = timelocal($sec,$min,$hour,$mday,$mon,$year);
my $theTime = 0;
for (my $i = $startTime; $i <= $endTime + 29; $i++) {
#print "$startTime $i \n";
$theTime = localtime($i);
#my $DBInstance0 = `grep "$hour:$min:$sec" "$ARGV[0]"`;# | grep 'DBInstance-0' | awk '{print \$9}'`;
#print "$DBInstance0\n";
print "$theTime\n";
}
print "$startTime $endTime \n";
Выход выглядит следующим образом:
Time::tm=ARRAY(0x8cbbd40)
Time::tm=ARRAY(0x8cbc1a0)
Time::tm=ARRAY(0x8cbbe80)
Time::tm=ARRAY(0x8cbc190)
Time::tm=ARRAY(0x8bbb170)
Time::tm=ARRAY(0x8cbc180)
Time::tm=ARRAY(0x8cbbf30)
Time::tm=ARRAY(0x8cbc170)
Time::tm=ARRAY(0x8cbc210)
Time::tm=ARRAY(0x8cbc160)
1275760356 1275760773
Я только иметь доступ к основным модулям Perl и Я не могу установить какие-либо другие.
Является ли это домашнее задание? И «невозможно установить какие-либо другие» просто означает, что вы не читали [Но я не могу использовать CPAN!] (Http://www.shadowcat.co.uk/blog/matt-s-trout/but-i -cant-use-cpan /) – Ether
Это начало большого скрипта для работы, и моя работа позволит мне использовать основные модули perl. Мы только начали использовать Perl, и основные модули были одобрены, и они тестируют других, но есть три месяца ожидания от запроса на использование модуля и разрешение на его использование. –
@Matt: в этом случае я рекомендую отправить ваше резюме на сайт http://careers.stackoverflow.com. – Ether