4

Gnu AWK は組み込み関数を提供します

strftime()

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")

また

seconds = timefromdate("2013-01-26 15:36:24", "%Y-%m-%d %H:%M:%S")

一方seconds、 です1359210984

そのため、日付文字列はフォーマット パターンで変換できる必要があります。

これを gawk のみで行いたいと思います。

編集1:

ストリームをさらに処理するために、日付を gawk でのみ変換したいと思います。

編集2:

私は自分の質問を明確にしました。「これを行う」コード例では少しずさんでした。

4

2 に答える 2

3

あなたが探している関数はと呼ばれmktime()ます。この関数を使用してgensub()、datespecを。で読み取れる形式に操作する必要がありますmktime()


提供する2番目の例をフォーマットするには、次のことを考慮してください。

BEGIN {
    t = "2013-01-26 15:36:24"
    f = "\\1 \\2 \\3 \\4 \\5 \\6"

    s = mktime(gensub(/(....)-(..)-(..) (..):(..):(..)/, f, "", t))

    print s
}

私のマシンでの結果:

1359178584

提供する最初の例をフォーマットするには、次のことを考慮してください。

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)
}

私のマシンでの結果:

1359178584

詳細については、マニュアル、特に時間関数文字列関数を参照してください。HTH。

于 2013-01-27T08:44:33.220 に答える