awk ISO到epoch

时间:2014-04-14 19:24:46

标签: time awk iso epoch

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

我有一个名为created的变量,它采用ISO格式:2013-12-26T17:03:05Z,我希望将其从ISO转换为纪元。我可以运行此行created_epoch=system("date +\%s -d " created)并将输出打印到终端,但变量created_epoch等于0,而不是纪元时间。

有谁知道如何在awk中将ISO格式转换为纪元?

谢谢!

3 个答案:

答案 0 :(得分:3)

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

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

https://www.gnu.org/software/gawk/manual/html_node/Getline_002fVariable_002fPipe.html#Getline_002fVariable_002fPipe

system命令返回由作为其值执行的命令返回的退出状态。 http://www.delorie.com/gnu/docs/gawk/gawk_137.html

答案 1 :(得分:1)

awk中的system命令,如在C中,返回命令的退出状态,所述命令的输出。正如其他人所建议的那样,您最好的选择是使用getline from a pipe

我在前一段时间遇到了类似的问题并推出了我自己的exec函数,这里是:

# get the output of a command
function exec(cmd,      data) {
  while ((cmd | getline data) > 0) printf("%s", data);
  close(cmd);
}

然后使用上面定义的函数,你应该这样做:

epoch = exec("date +%s -d \"<ISO DATE>\"")

其中<ISO DATE>是符合ISO标准的日期/时间戳。

示例:

# helper.awk is where `exec` is defined
awk '@include "helper.awk"; BEGIN
{ 
  epoch = exec("gdate -d \"2014-02-14T12:30\" +%s");
  print epoch
}'
# 1392406200

答案 2 :(得分:0)

这样做:

created_epoch=$(date +\%s -d "$created")
echo $created_epoch
1388077385