Gnu AWK 提供内置函数
strftime()
Run Code Online (Sandbox Code Playgroud)
它可以将时间戳转换1359210984为Sat 26. Jan 15:36:24 CET 2013. 我找不到可以执行此操作的函数:
seconds = timefromdate("Sat 26. Jan 15:36:24 CET 2013", "%a %d. %b %H:%M:%S CET %Y")
Run Code Online (Sandbox Code Playgroud)
或者
seconds = timefromdate("2013-01-26 15:36:24", "%Y-%m-%d %H:%M:%S")
Run Code Online (Sandbox Code Playgroud)
而seconds然后是1359210984。
因此,日期字符串应该可以通过格式模式进行转换。
我只想在 gawk 中执行此操作。
我想仅在 gawk 中转换日期以进一步处理流。
我已经澄清了我的问题。“会这样做”的代码示例有点草率。
您正在寻找的函数称为mktime(). 您应该使用该gensub()函数将日期规范操作为可以读取的格式mktime()。
要格式化您给出的第二个示例,请考虑:
BEGIN {
t = "2013-01-26 15:36:24"
f = "\\1 \\2 \\3 \\4 \\5 \\6"
s = mktime(gensub(/(....)-(..)-(..) (..):(..):(..)/, f, "", t))
print s
}
Run Code Online (Sandbox Code Playgroud)
我的机器上的结果:
1359178584
Run Code Online (Sandbox Code Playgroud)
要格式化您给出的第一个示例,请考虑:
BEGIN {
t = "Sat 26. Jan 15:36:24 CET 2013"
gsub(/\.|:/, FS, t)
split(t,a)
Y = a[8]
M = convert(a[3])
D = a[2]
h = a[4]
m = a[5]
s = a[6]
x = mktime(sprintf("%d %d %d %d %d %d", Y, M, D, h, m, s))
print x
}
function convert(month) {
return(((index("JanFebMarAprMayJunJulAugSepOctNovDec", month) - 1) / 3) + 1)
}
Run Code Online (Sandbox Code Playgroud)
我的机器上的结果:
1359178584
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查阅手册,特别是时间函数和字符串函数。HTH。