列出文件中当前epochtimestamp和epochtimestamp之间的绝对差异大于48小时的记录

时间:2015-12-08 14:46:21

标签: perl

我使用以下脚本列出输入文件中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

2 个答案:

答案 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);