我正在使用awk (mawk)用bash编写脚本,我想将系统命令的输出返回给awk。
我有一个名为created的变量,它是ISO格式的:2013-12-26T17:03:05Z,我想把它从ISO转换到时代。我可以运行这一行created_epoch=system("date +\%s -d " created),它将输出打印到终端,但是变量created_epoch等于0,而不是时代时间。
有谁知道我如何将ISO格式转换成awk中的时代?
谢谢!
发布于 2014-04-14 20:31:42
尝试在管道中的变量中使用getline而不是system
cmd="date +\%s -d "created; cmd | getline current_timesystem命令返回作为其值执行的命令返回的退出状态。137.html
发布于 2014-04-14 20:31:50
与C中一样,awk中的system命令返回命令的退出状态,而不是该命令的输出。正如其他人所建议的,您最好的选择是使用 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发布于 2014-04-14 20:30:45
这样做吧:
created_epoch=$(date +\%s -d "$created")
echo $created_epoch
1388077385https://stackoverflow.com/questions/23068557
复制相似问题