如何在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和可选的夏令时标志。(sourcemangawk
)当你试图解决一个问题时,请不要开始一个全新的问题,你正在运行一个潜在的解决方案来解决你现有的问题。另外-当您的问题非常具体地涉及使用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