我的.csv文件包含这样的行:
xxxx,xxxxxx,Sep 1, 2015 21:32:15.xxxxxxxxx WEST
xxxx,xxxxxx,Sep 28, 2015 23:46:16.xxxxxxxxx WEST
xxxx,xxxxxx,Sep 30, 2015 21:23:17.xxxxxxxxx WEST
我需要更改所有日期和时间:
xxxx,xxxxxx,2015-09-01,21:32:15
xxxx,xxxxxx,2015-09-28,23:46:16
xxxx,xxxxxx,2015-09-30,21:23:17
我认为使用awk和date是可能的,但直到现在还没有用。
答案 0 :(得分:1)
$ cat tst.awk
BEGIN{ FS=OFS=","; mths="JanFebMarAprMayJunJulAugSepOctNovDec" }
{
split($3,mthDay,/ +/)
split($4,yrTime,/[ .]/)
$3 = sprintf("%04d-%02d-%02d", yrTime[2], (match(mths,mthDay[1])+2)/3, mthDay[2])
$4 = yrTime[3]
print
}
$ awk -f tst.awk file
xxxx,xxxxxx,2015-09-01,21:32:15
xxxx,xxxxxx,2015-09-28,23:46:16
xxxx,xxxxxx,2015-09-30,21:23:17
答案 1 :(得分:0)
一些perl:
perl -MTime::Piece -F, -lape '
($d2, $d1) = (pop(@F), pop(@F));
$d2 =~ s/\..*//;
push @F, Time::Piece->strptime($d1.$d2, "%b %e %Y %T")->strftime("%Y-%m-%d,%T");
$_ = join ",", @F;
' file
从每行删除最后2个以逗号分隔的字段,删除小数时间和时区,重新格式化时间并打印。