GAWK:strftime() 的逆 - 使用格式模式将日期字符串转换为自 epoc 时间戳以来的秒数

try*_*lly 5 linux shell gawk

Gnu AWK 提供内置函数

strftime()
Run Code Online (Sandbox Code Playgroud)

它可以将时间戳转换1359210984Sat 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 中执行此操作。

编辑1:

我想仅在 gawk 中转换日期以进一步处理流。

编辑2:

我已经澄清了我的问题。“会这样做”的代码示例有点草率。

Ste*_*eve 5

您正在寻找的函数称为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。