我的输入文件日期格式每天都在变化
my input file date format changes on daily basis
我需要帮助,我的 $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;
您可以使用opendir
打开一个目录并使用readdir
阅读它。对于访问的每个文件,您可以检查它是否具有正确的格式(根据 simbabque 的评论)并将其添加到数组中。
然后你可以对数组进行排序。
由于命名约定,最新文件将始终按您排序中的 'largest' 值排序。
了解更多有关排序的信息(如果需要)
Perl sort function on glob 将生成排序数组,您对可以用索引 -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;
我需要帮助,我的 $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;
您可以使用opendir
打开一个目录并使用readdir
阅读它。对于访问的每个文件,您可以检查它是否具有正确的格式(根据 simbabque 的评论)并将其添加到数组中。
然后你可以对数组进行排序。
由于命名约定,最新文件将始终按您排序中的 'largest' 值排序。
了解更多有关排序的信息(如果需要)Perl sort function on glob 将生成排序数组,您对可以用索引 -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;