특정 날짜의 파일을 나열하고 Perl로 다른 파일에 쓰기

특정 날짜의 파일을 나열하고 Perl로 다른 파일에 쓰기

목록이 있어요.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;

관련 정보