샘플 CSV 파일에서 데이터 생성

샘플 CSV 파일에서 데이터 생성

1백만 개의 레코드와 1개의 날짜(14/03/2017 00:11:17)가 포함된 샘플 CSV 데이터 파일이 있습니다. 이 샘플 CSV 파일에서 6개월 분량의 데이터를 생성해야 합니다. Bash 스크립트는 1일 분량의 데이터를 생성하는 데 20분이 걸립니다.

데이터 샘플

  • '2017-12-01 03:22:17,샘플 데이터,1234,샘플,123455,67546464'

예상되는 결과

  • '01/01/2017 03:22:17,샘플데이터,1234,샘플,123455,67546464'

  • '2017-02-01 03:22:17,샘플데이터,1234,샘플,123455,67546464'

    도착하다

  • '2017-01-30 03:22:17,샘플 데이터,1234,샘플,123455,67546464'

답변1

cat 6months.pl 
#!/usr/bin/env perl
use Text::CSV;
use DateTime;
use DateTime::Format::Strptime;
use autodie     qw/ open close /;

my $csv = Text::CSV->new({binary => 1, quote_space => 0}); 
my $dateparser = DateTime::Format::Strptime->new(pattern => "%d/%m/%Y %T", time_zone => "local");

for my $file (@ARGV) {
    open my $fh, '<', $file;
    while (my $row = $csv->getline($fh)) {
        my $datestr = shift @$row;
        my $date = $dateparser->parse_datetime($datestr)->truncate(to => month);
        my $end = $date->clone->add(months => 6);
        while ($date <= $end) {
            $csv->say(STDOUT, [$dateparser->format_datetime($date), @$row]);
            $date = $date->add(days => 1);
        }
    }
    close $fh;
}

실행하세요:

perl 6months.pl data.csv 
01/01/2017 00:00:00,sampledata,1234,sample,123455,67546464
02/01/2017 00:00:00,sampledata,1234,sample,123455,67546464
...
30/06/2017 00:00:00,sampledata,1234,sample,123455,67546464
01/07/2017 00:00:00,sampledata,1234,sample,123455,67546464

방금 이것이 시간을 자정으로 재설정한다는 것을 알아냈습니다. 시간을 절약하려면 다음을 수행하십시오.

    my $date = $dateparser->parse_datetime($datestr)->set(day => 1);
    #                                                 ^^^^^^^^^^^^^

관련 정보