2011-12-28 114 views
2

我有字符串: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將它轉換,但我想保持一個awk過程中。

有沒有更好的(更短或更優雅)的方式?

N.B.我想盡可能通用(gensub gawk only(?))。

+0

據我只知道* GNU AWK *支持* mktime *,所以* gensub *應該沒問題。 – 2011-12-28 12:25:55

回答

3
$ echo 20120113083000 | sed 's/../& /g; s/ //' | awk '{print mktime($0)}' 
$ echo 20120113083000 | awk '{print mktime(gensub(/ /, "", "1", gensub(/../, "& ", "g")))}' 
+0

謝謝,但我真的想要一個awk解決方案。順便說一句,sed的/../&/ 3g''也可以。 – potong 2011-12-28 12:51:29

+0

感謝您添加第二個解決方案。 – potong 2011-12-28 13:26:38

4
echo 20120113083000Z | awk 'BEGIN { FS = "" } ; { print $1$2$3$4, $5$6, $7$8, $9$10, $11$12, $13$14, $15 }' 
3

這可能爲我工作:

echo '20120113083000Z' | awk '{gsub(/../,"& ");sub(/ /,"")}1' 
2012 01 13 08 30 00 Z