使用Linux中的AWK将日期转换为纪元时间

时间:2011-11-01 11:19:19

标签: linux excel unix awk

我有一个以逗号分隔的文件,第一列是格式为01/31/2010的日期 我想改成纪元时间,例如文件“file.csv”:

 01/30/2010,1,"hi"
 01/31/2010,3,"bye"

将变为“output.csv”:

 1264809600,1,"hi"
 1264896000,3,"bye"

我知道命令行日期-d“01/30/2010”+%s会起作用,但只能在一个日期,我需要将它提供给一个表,所以,有没有办法使用awk用一些func():

cat file.csv | awk -F, 'print func($1)","$2","$3}'

由于我真的不在乎我是怎么做的,或者,当字符串为mm / dd / yyyy时,如何将excel中的日期更改为纪元...

3 个答案:

答案 0 :(得分:5)

TZ=PST awk -F, '{split($1,date,"/");
                 $1=mktime(date[3] " " date[1] " " date[2] " " "00 00 00");
                 print}'

或者,调用date

TZ=PST awk -F, '{ OFS = FS;
                  command="date -d" $1 " +%s";
                  command | getline $1;
                  close(command);
                  print}'

答案 1 :(得分:1)

在excel上,假设a1已于2010年1月30日发布。然后在某处=(A1-DATE(1970,1,1))*86400,然后将数字格式更改为常规

或者,我不知道awk,但是使用python,(.total_seconds()需要相当新的版本)

import datetime as DT
f = [
'01/30/2010,1,"hi"',
'01/31/2010,3,"bye"',
]
e0 = DT.date(1970,1,1)
for line in f:
    mm,dd,yyyy=[int(x) for x in line[:2],line[3:5],line[6:10]]
    e=int((DT.date(yyyy,mm,dd)-e0).total_seconds())
    print str(e) + line[10:]

答案 2 :(得分:0)

echo "2016-01-31 23:47:27" | awk -F, '{ OFS = FS;command="date -d " "\"" $1 "\""  " +%s";command | getline $1;close(command);print}'

我们需要传递双引号,因为我们需要在下面执行:

date -d"2016-01-31 23:47:27" +%s