我正在使用awk
(mawk)在bash中编写脚本,我想将系统命令的输出返回给awk。
我有一个名为created
的变量,它采用ISO格式:2013-12-26T17:03:05Z
,我希望将其从ISO转换为纪元。我可以运行此行created_epoch=system("date +\%s -d " created)
并将输出打印到终端,但变量created_epoch
等于0
,而不是纪元时间。
有谁知道如何在awk中将ISO格式转换为纪元?
谢谢!
答案 0 :(得分:3)
尝试将getline
用于管道中的变量,而不是system
cmd="date +\%s -d "created; cmd | getline current_time
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