Tôi đang cố gắng viết một tập lệnh Perl phân tích cú pháp nhật ký trong đó trên mỗi dòng, giá trị thứ hai là ngày. Kịch bản lệnh có ba đối số: tệp nhật ký đầu vào, thời gian bắt đầu và thời gian kết thúc. Thời gian bắt đầu và kết thúc được sử dụng để phân tích một giá trị nhất định trên mỗi dòng nằm giữa hai lần đó. Nhưng để chạy đúng cách này tôi đang chuyển đổi thời gian bắt đầu và kết thúc thành thời gian. Vấn đề tôi đang gặp phải là để chuyển đổi giá trị 'i' của vòng lặp trở lại thời gian bình thường để so sánh với tệp nhật ký. Sau khi chạy localtime($i)
Tôi in giá trị và chỉ thấy một tham chiếu được in không phải giá trị thực.Làm cách nào để chuyển đổi thời gian epoch thành thời gian bình thường trong Perl?
Đây là kịch bản tôi có cho đến nay (nó là một công việc đang tiến):
#!/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";
Kết quả trông giống như:
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
tôi chỉ có quyền truy cập vào lõi module Perl và không thể cài đặt bất kỳ người nào khác.
là bài tập về nhà này? Và "không thể cài đặt bất kỳ người nào khác" chỉ đơn giản có nghĩa là bạn chưa đọc [Nhưng tôi không thể sử dụng CPAN!] (Http://www.shadowcat.co.uk/blog/matt-s-trout/but-i -cant-use-cpan /) – Ether
Đây là khởi đầu của một tập lệnh lớn hơn cho công việc và công việc của tôi sẽ chỉ cho phép tôi sử dụng các mô-đun perl cốt lõi. Chúng tôi chỉ mới bắt đầu sử dụng Perl và các mô-đun lõi được phê duyệt và họ đang thử nghiệm những người khác, nhưng có thời gian chờ đợi ba tháng từ yêu cầu sử dụng một mô-đun và được phép sử dụng nó. –
@Matt: trong trường hợp đó, tôi khuyên bạn nên gửi sơ yếu lý lịch của mình tới http://careers.stackoverflow.com. – Ether