Awk字符串操作
我有字符串:Awk字符串操作,awk,Awk,我有字符串: 20120113083000Z 我想把它转换成: 2012 01 13 08 30 00 Z 准备好使用mktime命令将其转换为日期戳 我目前有: echo '20120113083000Z' | awk '{print mktime(gensub(/(....)(..)(..)(..)(..)(..)(.)/,"\\1 \\2 \\3 \\4 \\5 \\6 \\7",1g,$1))}' 1326439800 我知道我可以使用sed或bash来转换它,但我希望将它
20120113083000Z
我想把它转换成:
2012 01 13 08 30 00 Z
准备好使用mktime
命令将其转换为日期戳
我目前有:
echo '20120113083000Z' |
awk '{print mktime(gensub(/(....)(..)(..)(..)(..)(..)(.)/,"\\1 \\2 \\3 \\4 \\5 \\6 \\7",1g,$1))}'
1326439800
我知道我可以使用sed或bash来转换它,但我希望将它保留在awk进程中
有更好(更短或更优雅)的方法吗
注意:我希望尽可能使其通用(
gensub
gawk only(?)。这可能对我有用:
echo '20120113083000Z' | awk '{gsub(/../,"& ");sub(/ /,"")}1'
2012 01 13 08 30 00 Z
据我所知,只有GNU awk支持mktime,所以gensub应该可以。谢谢,但我真的想要一个awk解决方案。顺便说一句,sed's/./&/3g'也能工作。感谢您添加第二个解决方案。
echo 20120113083000Z | awk 'BEGIN { FS = "" } ; { print $1$2$3$4, $5$6, $7$8, $9$10, $11$12, $13$14, $15 }'
echo '20120113083000Z' | awk '{gsub(/../,"& ");sub(/ /,"")}1'
2012 01 13 08 30 00 Z