【问题标题】:Convert date to epoch time using AWK in linux在 Linux 中使用 AWK 将日期转换为纪元时间
【发布时间】:2011-12-19 10:07:44
【问题描述】:

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

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

会变成“output.csv”:

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

我知道命令行 date -d "01/30/2010" +%s 可以工作,但只能在一个日期上工作,我需要将它输入到表格中,所以,有没有办法使用 awk有一些 func():

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

由于我并不真正关心我是如何做到这一点的,或者,当字符串为 mm/dd/yyyy 时,我如何将 excel 中的日期更改为纪元...

【问题讨论】:

  • 您应该指明您的时区。是太平洋标准时间,对吧?
  • 您无法控制文件的生成吗?你能用纪元时间生成文件吗?

标签: linux excel unix awk


【解决方案1】:
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}'

【讨论】:

  • 第二个答案似乎更好,但是,如果第一个字段在后续输入行(记录)中没有更改,则只有序列的第一行转换第一个字段,下一个转换的行是第一个字段与前几行不同的那个...为什么会这样?
  • @pms: getline 检查它正在访问的命令/文件。如果它是一个已经打开的,它会从那里读取下一个输入行。所以,你需要close这个命令。很好的收获,我从来没有注意到getline
【解决方案2】:

在 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:]

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

    • 你是在回答还是在提问?
    • 这与 ninjalj 给出的答案相同,不同之处在于它是内联的。如果您尝试运行上述命令,您将得到。
    • echo "2016-01-31 23:47:27" | awk -F,'{ OFS = FS;命令="日期-d\""$1" "$2"\" +%s";命令 |获取线;关闭(命令); print}' 也可以减少撇号。
    猜你喜欢
    • 2011-10-12
    • 2018-04-24
    • 2011-12-06
    • 2012-09-06
    • 1970-01-01
    • 2012-11-08
    • 2019-01-15
    • 2012-07-29
    相关资源
    最近更新 更多