如何在awk中使用mktime内的变量?

如何在awk中使用mktime内的变量?,awk,sed,Awk,Sed,我有一个变量timeData,它的值在awk中如下所示 $(f["DateTime"])="2018-12-17 15:10:19" timeData = gensub(/[-:]/," ","g",$(f["DateTime"])) 我需要使用mktime(timeData)以便它以秒为单位给出时间 temp = mktime(timeData) 打印temp的值会将-1作为输出,我认为问题不是在mktime中使用双引号,有人能告诉我如何在awk中使用它吗。请注意: $ awk 'BEG

我有一个变量
timeData
,它的值在awk中如下所示

$(f["DateTime"])="2018-12-17 15:10:19"

timeData = gensub(/[-:]/," ","g",$(f["DateTime"]))
我需要使用
mktime(timeData)
以便它以秒为单位给出时间

temp = mktime(timeData)
打印temp的值会将
-1
作为输出,我认为问题不是在mktime中使用双引号,有人能告诉我如何在awk中使用它吗。

请注意:

$ awk 'BEGIN{temp=2018 12 26 11 54 43; temp2="2018 12 26 11 54 43"; print temp; print temp2; print mktime(temp2);}'
20181226115443
2018 12 26 11 54 43
1545796483
你基本上做得对,但是…

这是因为您没有在指定的日期前后加引号,因此它们被连接起来。

假设您使用的是GNU awk,那么您的代码就非常好了。如果您有问题,那么它与您的输入数据有关,而不是与您的代码有关,而且它肯定与在mktime()中添加双引号无关:


更准确地说,操作
expr expr
连接字符串。因此,表达式
temp=2018 12 26 11 54 43
将首先将所有整数转换为字符串,然后将这些字符串连接起来。@kvantour您现在能告诉我怎么做吗,我已经编辑了我的问题,可能会更清楚,timeData=“gensub(/[-:]/,”,“g”,“$(f[“DateTime”])”将gensub放在双引号内不起作用。
mktime(datespec[,utc标志])
datespec
转换为时间戳,格式与
systime()
返回的格式相同。它类似于ISO C中同名的函数。参数
datespec
,是一个格式为
“YYYY-MM-DD-HH-MM-SS[DST]”的字符串。字符串由六个或七个数字组成,分别代表全年,包括世纪、1到12的月份、1到31的月份、0到23的小时、0到59的分钟、0到60的第二个数字、55和可选的夏令时标志。(source
mangawk
)当你试图解决一个问题时,请不要开始一个全新的问题,你正在运行一个潜在的解决方案来解决你现有的问题。另外-当您的问题非常具体地涉及使用GNU awk函数时,为什么要用
sed
标记您的问题?对不起,我将删除此问题并继续现有问题中的讨论。双引号的建议是原始问题的结果。现在的问题完全不同了(见)。啊,我明白了。我也遇到了同样的问题,即循环使用OPs原始问题()的需求,最终我放弃了。
awk 'BEGIN {
$(f["DateTime"])="2018-12-17 15:10:19"

timeData = gensub(/[-:]/," ","g",$(f["DateTime"]))

temp = mktime(timeData)

print timeData, "->", temp
}'
2018 12 17 15 10 19 -> 1545081019