使用awk和mktime替换带有时间戳的文件中的日期

时间:2013-07-05 21:42:25

标签: regex linux unix awk gawk

我有一个大型CSV文件,日期存储为YYYY-MM-DD。我需要将这些转换为时间戳。为了转换,我假设时间是所有日期的中午。

我正在尝试使用像

这样的gawk脚本
gawk '{
    print gensub(/([0-9]{4})-([0-9]{2})-([0-9]{2})/, mktime("\\1 \\2 \\3 12 0 0"), "g");
}' file.csv

但由于某种原因,mktime总是为值返回-1。我知道我可以用Python脚本做得更好,但仅仅是出于学习目的,我想知道为什么这不起作用。

1 个答案:

答案 0 :(得分:3)

你很亲密,试试这个:

awk '{
print  mktime(gensub(/([0-9]{4})-([0-9]{2})-([0-9]{2})/, "\\1 \\2 \\3 12 0 0", "g")); 
}'   

示例:

kent$  echo "2008-10-31"|awk '{
print    mktime(gensub(/([0-9]{4})-([0-9]{2})-([0-9]{2})/, "\\1 \\2 \\3 12 0 0", "g")); 
}'   
1225450800