首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Awk ISO划时代

Awk ISO划时代
EN

Stack Overflow用户
提问于 2014-04-14 19:24:45
回答 3查看 1.4K关注 0票数 2

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

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

有谁知道我如何将ISO格式转换成awk中的时代?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-14 20:31:42

尝试在管道中的变量中使用getline而不是system

代码语言:javascript
复制
cmd="date +\%s -d "created; cmd | getline current_time

002fPipe

system命令返回作为其值执行的命令返回的退出状态。137.html

票数 3
EN

Stack Overflow用户

发布于 2014-04-14 20:31:50

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

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

代码语言:javascript
复制
# get the output of a command
function exec(cmd,      data) {
  while ((cmd | getline data) > 0) printf("%s", data);
  close(cmd);
}

然后,使用上面定义的函数,您应该执行如下操作:

代码语言:javascript
复制
epoch = exec("date +%s -d \"<ISO DATE>\"")

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

示例:

代码语言:javascript
复制
# helper.awk is where `exec` is defined
awk '@include "helper.awk"; BEGIN
{ 
  epoch = exec("gdate -d \"2014-02-14T12:30\" +%s");
  print epoch
}'
# 1392406200
票数 1
EN

Stack Overflow用户

发布于 2014-04-14 20:30:45

这样做吧:

代码语言:javascript
复制
created_epoch=$(date +\%s -d "$created")
echo $created_epoch
1388077385
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23068557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档