我有一个清单.DTA具有以下日期的文件。
Jun 26 02:53 fs261803.DTA
Jun 26 02:54 fs261804.DTA
Jun 26 02:56 fs261805.DTA
Jun 26 03:25 fs261865.DTA
Jun 26 03:27 fs261869.DTA
Jun 27 03:21 fs271865.DTA
Jun 27 03:23 fs271869.DTA
Jun 28 03:23 fs281865.DTA
Jun 28 03:25 fs281869.DTA
Jun 29 03:21 fs291865.DTA
Jun 29 03:23 fs291869.DTA
Jun 29 03:54 fs291803.DTA
我想写全部6月29日将数据归档到一个文件中。我有将多个文件合并为一个的逻辑。下面是我的代码。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my $start_pos = 0;
my $data_len = 15;
my $pad_len = 54;
my $dir = ".";
opendir(DIR, $dir) or die "Cannot open directory: $dir!\n";
my @files = readdir(DIR);
closedir(DIR);
open my $out, ">>output.trns" or die "Cannot open output.trns!\n";
foreach my $file (@files)
{
if($file =~ /DTA$/)
#if ($file=`ls -rlt *.DTA` )
{
#print "$file\n";
open my $in, "<$file" or die "Cannot open $file!\n";
while (<$in>) {
say $out ' ' x $pad_len, substr($_, $start_pos, $data_len);
}
close $in;
}
}
close $out;
在这段代码中我可以结合所有.DTA文件合二为一。但我只需要结合6月29日文件来创建一个新文件。有人可以帮我吗perl
?
答案1
为了比较文件的时间戳(大概是修改时间),您需要对stat()
每个文件并比较相应的年、月、日。以下是对 2018-06-29 的过滤器进行硬编码的示例:
next unless $file =~ /DTA$/;
my $fullpath = $dir . "/" . $file;
my $wantedyear=2018;
my $wantedmonth=5; ## zero-based
my $wantedday=29;
my $mtime=(stat $fullpath)[9];
my $fileyear=(localtime($mtime))[5] + 1900;
next unless $fileyear == $wantedyear;
my $filemonth=(localtime($mtime))[4];
next unless $filemonth == $wantedmonth;
my $fileday=(localtime($mtime))[3];
next unless $fileday == $wantedday;