我有一个格式很大的格式文件:
29/01/2010 18:00 string1 string2 .....
30/01/2010 18:30 string3 string4 .....
...
...
dd/mm/yyyy hh:MM strings strings....
我需要根据日期执行一些统计。
所以我想在文件中用字符dd/mm/yyyy hh:MM
替换纪元时间,以便执行简单的操作。
我认为最好的方法是使用Perl,但我真的不知道从哪里开始。任何提示?
答案 0 :(得分:4)
就是这样?这个快速而肮脏的单行应该做:
perl -MPOSIX -pwe 's{^(\d{2})/(\d{2})/(\d{4}) (\d{2}):(\d{2}) }{mktime(0,$5,$4,$1,$2-1,$3-1900)." "}e;'
将文件输入标准输入,然后将更改后的版本输出到标准输出。它所做的就是在开始时查找具有“dd / mm / yyyy hh:mm”的行,并将日期组件从mktime
模块提供给POSIX
函数以获取unix时间戳。
答案 1 :(得分:2)
use DateTime::Format::Strptime;
my $Strp = new DateTime::Format::Strptime(
pattern => '%d/%m/%Y %H:%M',
locale => 'en_EN',
time_zone => 'UTC',
);
open INPUT, $file;
while (<INPUT>)
{
my ($date, $time, $foo) = split(' ', $_, 3);
my $dt = $Strp->parse_datetime("$date $time");
printf "%s %s", $dt->strftime('%s'), $foo;
}
close INPUT;
答案 2 :(得分:1)
您可以使用核心模块Time::Local
#!/usr/bin/perl
use 5.10.1;
use strict;
use warnings;
use Time::Local;
while(<DATA>) {
if (m#(\d+)/(\d+)/(\d+)\s+(\d+):(\d+)\s#) {
say timelocal(0,$5,$4,$1,$2-1,$3);
}
}
__DATA__
29/01/2010 18:00 string1 string2 .....
30/01/2010 18:30 string3 string4 .....
<强>输出:强>
1264784400
1264872600