【问题标题】:my input file date format changes on daily basis我的输入文件日期格式每天都在变化
【发布时间】:2021-11-09 15:59:50
【问题描述】:

我需要帮助,我的$inputfile 每天都会更改,生成并存储在/tmp 目录下。文件格式日期如下。

/tmp
570572 Sep 13 21:02 sessions_record_2021-09-13_210052.csv
570788 Sep 14 09:01 sessions_record_2021-09-14_090041.csv

我不确定如何将其作为输入文件而不是硬编码在我的脚本中

#!/usr/bin/perl

use strict; use warnings;
use Tie::Array::CSV;
use Data::Dumper;
use Date::Parse;
use POSIX qw(strftime);

my $hours = 1;
my $timenow = time;
my $inputfile = "sessions_record_2021-09-14_090041.csv";

tie my @sessions_record, 'Tie::Array::CSV', $inputfile, {
   tie_file => { recsep => "\r\n" },
   text_csv => { binary => 1 }
};

tie my @incidentidlist, 'Tie::Array::CSV', 'incidentidlist.csv';

@incidentidlist = map {
   ([$$_[4] =~ /\A([^\s]+)/, $$_[4], $$_[18], ($timenow -
str2time($$_[18])) / 60 / 60])
} grep { 
   $$_[0] =~ /^ServiceINC/ && ($timenow - str2time($$_[18])) / 60 / 60 > $hours 
} @sessions_record;

【问题讨论】:

  • 读取文件夹,过滤名称中具有正确命名模式(即/^sessions_record_)以及可能是今天的日期的文件,然后打开其中最近的一个。
  • @simbabque 使用 glob 可能更简单:my @files = </tmp/sessions_record*>

标签: html regex csv perl opendir


【解决方案1】:

glob 上的 Perl sort 函数将生成排序数组,您对可以使用索引 -1 处理的最后一个元素感兴趣。

use strict;
use warnings;
use feature 'say';

my $in_file = (sort glob('/tmp/sessions_record_*.csv'))[-1];

say $in_file;

如果您对今天的文件感兴趣,localtime 可以帮助形成文件名$fname

use strict;
use warnings;
use feature 'say';

my($mask,$fname);
my($mday,$mon,$year) = (localtime)[3..5];

$year  += 1900;
$mon   += 1;
$mask   = sprintf('/tmp/sessions_record_%4d-%02d-%02d_*.csv', $year, $mon, $mday);
$fname  = (glob($mask))[0];

say 'File: ' . $fname;
say '-' x 45;

open my $fh, '<', $fname
    or die "Couldn't open $fname";

print while <$fh>;

close $fh;

【讨论】:

  • 你可以省点麻烦:use POSIX 'strftime';$mask = strftime('/tmp/sessions_record_%Y-%m-%d_*.csv', localtime);
  • 谢谢@JimDavis - 太好了,这正是我想要的
【解决方案2】:

您可以使用opendir 打开一个目录并使用readdir 读取它。对于访问的每个文件,您可以检查它是否具有正确的格式(根据 simbabque 的评论)并将其添加到数组中。

然后你可以对你的数组进行排序。

由于命名约定,最新文件将始终作为排序中的“最大”值排序。

您可以在https://www.perltutorial.org/perl-sort/了解更多关于排序的信息(如果需要)

【讨论】:

    猜你喜欢
    • 2019-08-06
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多