我使用以下脚本列出输入文件中Jobs的详细信息:backup_report.txt。
报告中的第四个字段(由$ data [6]表示)是纪元时间戳。以下命令将此转换为可读时间戳($ data [6] =标量(localtime($ data [6]));)
如何仅显示时间戳大于48小时的记录(当前时间戳(纪元格式) - $ data [6](纪元格式)/ 3600应大于48)
此外,时间戳需要转换为可读格式。
#!/usr/bin/perl
use warnings;
use strict;
open my $fh, "<", "backup_report.txt" or die $!;
open my $outputfile, ">", "active_jobs.txt" or die $!;
while (my $line = <$fh>)
{
no warnings 'numeric';
chomp $line;
my @data = split (' ', $line);
if ($data[1] == 0 and $data[2] == 1)
{
$data[6]=scalar(localtime($data[6]));
print $outputfile "$data[0] $data[3] $data[5] $data[6] \n";
}
}
close $fh;
close $outputfile;
输入文件:
237576 0 1 GYTFRUIP01_TYOEPUK_RMAN Default-Application-Backup prtygrf01 1442149024 0000000055 1442149079 23328
237575 0 1 GYTFRUIP01_TYOEPUK_RMAN Default-Application-Backup prtygrf01 1442148956 0000000053 1442149009 2848
237574 0 3 GYTFRUIP01_TYOEPUK_RMAN Default-Application-Backup prtygrf01 1442148954 0000000045 1442148999 544
答案 0 :(得分:0)
我猜你的意思是你想跳过不到48小时的行。
你建议的数学有点复杂。你可以just call time
。它将返回当前的unix时间戳( epoch )。现在减去转换前$data[6]
中{em> epoch 的值。如果大于48小时(3600 * 48
),则为skip using next
。
use strict;
use warnings;
use feature 'say';
my $timestamp = 1442149024;
say 'old' if time - $timestamp > 48 * 3600;
我会在split
之后加上这个。
my @data = split (' ', $line);
next if time - $data[6] > 48 * 3600;
答案 1 :(得分:0)
这是Unix过滤器模型的完美用法(从STDIN读取,写入STDOUT)。
$ ./filter_program < in_file > out_file
将其命名为:
get (1)
streamsize precision() const;
set (2)
streamsize precision (streamsize prec);