Time Awk ISO至新纪元

Time Awk ISO至新纪元,time,awk,iso,epoch,Time,Awk,Iso,Epoch,我正在使用awk(mawk)在bash中编写一个脚本,我想将系统命令的输出返回给awk 我创建了一个名为的变量,它是ISO格式的:2013-12-26T17:03:05Z,我想将它从ISO转换为epoch。我可以运行这行created\u epoch=system(“date+\%s-d”created),它将输出打印到终端,但是变量created\u epoch等于0,而不是epoch时间 有人知道如何在awk中将ISO格式转换为epoch格式吗 谢谢 这样做: created_epoch=$

我正在使用
awk
(mawk)在bash中编写一个脚本,我想将系统命令的输出返回给awk

我创建了一个名为
的变量,它是ISO格式的:
2013-12-26T17:03:05Z
,我想将它从ISO转换为epoch。我可以运行这行
created\u epoch=system(“date+\%s-d”created)
,它将输出打印到终端,但是变量
created\u epoch
等于
0
,而不是epoch时间

有人知道如何在awk中将ISO格式转换为epoch格式吗

谢谢

这样做:

created_epoch=$(date +\%s -d "$created")
echo $created_epoch
1388077385
epoch = exec("date +%s -d \"<ISO DATE>\"")

尝试从管道中将
getline
用于变量,而不是
system

cmd="date +\%s -d "created; cmd | getline current_time


system
命令返回执行的命令返回的退出状态作为其值。
awk中的
系统
命令与C中的命令一样,返回命令的退出状态,而不是所述命令的输出。正如其他人所建议的,您最好的选择是使用

不久前,我遇到了一个类似的问题,并使用了自己的
exec
函数,如下所示:

# get the output of a command
function exec(cmd,      data) {
  while ((cmd | getline data) > 0) printf("%s", data);
  close(cmd);
}
然后使用上面定义的函数,您应该执行以下操作:

created_epoch=$(date +\%s -d "$created")
echo $created_epoch
1388077385
epoch = exec("date +%s -d \"<ISO DATE>\"")

+1用于解释和多行解决方案(尽管@Håkon Hægland的单行解决方案在这种情况下就可以了)。我认为这是如何在shell脚本中实现的,但在shell脚本中的AWK脚本中不起作用。