次の文字列(20140805234656)を日付タイムスタンプ(2014-08-05 23:46:56)に変換したいのですが、gawkは初めてですが、私はしません正確な構文を知って、5、8ごとに-を、14、17ごとに:を配置し、11のインデックスに ""を配置する方法を教えてください。これをawkで達成するための効率的な方法はありますか?
[〜#〜]編集[〜#〜]
文字列がawkに変数として含まれていることに注意してください。レコードの処理中に文字列を生成しました。
GNU awkを使用してそれを行う1つの方法はこれです:
echo 20140805234656 | awk 'BEGIN { FIELDWIDTHS = "4 2 2 2 2 2" } { printf "%s-%s-%s %s:%s:%s\n", $1, $2, $3, $4, $5, $6 }'
次のように部分文字列を使用できます。
echo 20140805234656 | awk '{print substr($0,1,4)"-"substr($0,5,2)"-"substr($0,7,2)" "substr($0,9,2)":"substr($0,11,2)":"substr($0,13,2) }'
おそらくもっと簡単な方法もあります。
別のGNU awk回答
gawk -v timestamp=20140805234656 '
BEGIN {
if (match(timestamp, /(....)(..)(..)(..)(..)(..)/, m)) {
t = mktime(m[1] " " m[2] " " m[3] " " m[4] " " m[5] " " m[6])
print strftime("%F %T", t)
print strftime("%c", t)
}
}
'
2014-08-05 23:46:56
Tue Aug 5 23:46:56 2014
別のGNU awk
アプローチ:
result = gensub("(....)(..)(..)(..)(..)", "\\1-\\2-\\3 \\4:\\5:", 1, your_variable)
試してください:
echo 20140805234656 | awk ' { printf "%s-%s-%s %s:%s:%s",
substr($0,1,4),
substr($0,5,2),
substr($0,7,2),
substr($0,9,2),
substr($0,11,2),
substr($0,13,2)
} '
または、最初に変数に割り当てたい場合:
echo 20140805234656 | awk ' { d=sprintf ("%s-%s-%s %s:%s:%s",
substr($0,1,4),
substr($0,5,2),
substr($0,7,2),
substr($0,9,2),
substr($0,11,2),
substr($0,13,2));
print "Date is: " d
} '
別の方法:
$ echo 20140805234656 |
awk '{split($0,a,"");printf("%s-%s-%s %s:%s:%s\n",a[1]a[2]a[3]a[4],a[5]a[6],a[7]a[8],a[9]a[10],a[11]a[12],a[13]a[14])}'
2014-08-05 23:46:56