我有一个文件,其中包含以下格式的日期列表:yyyymmddhhmmss
20150608141617
20150608141345
20150608141649
20150608141506
20150608141618
20150608141545
如果在之前的流程中生成过程中出现错误,则需要验证这些日期的正确性。
正确性意味着没有空格,长度为14个字符且日期有效,即没有像20151508141545
这样的日期。
这可能在perl或bash中吗?
答案 0 :(得分:1)
以下将根据您的需要进行快速检查,然后使用内置Time::Piece
模块验证正确性。
#!/usr/bin/perl
use warnings;
use strict;
use Time::Piece;
for my $entry (<DATA>){
chomp $entry;
next if length($entry) > 14;
my $date;
eval {
$date = Time::Piece->strptime($entry, "%Y%m%d%H%M%S");
};
if ($@){
next;
}
print "$date\n";
}
__DATA__
20150608141617
20152525252525
201506081413454
20150608141649
20150608141506
20150608141618
20150608141545
要将此代码更改为从for()
循环上方的文件中读取,请写入:
open my $fh, '<', 'filename.txt'
or die "Can't open the file: $!";
然后在for()
循环中,将<DATA>
更改为<$fh>
并删除__DATA__
及其下方的所有内容。