2011-12-28 3 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 

Я знаю, что я мог бы использовать или патч в Баш, чтобы преобразовать его, но я хотел бы сохранить его в процессе AWK.

Есть ли лучший (более короткий или элегантный) способ?

N.B. Я хотел бы сделать это как можно более общим (gensub gawk only (?)).

+0

Насколько я знаю, только * GNU AWK * поддерживает * * указываете ей, поэтому * gensub * должно быть в порядке. –

ответ

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

Спасибо, но я действительно хотел решение awk. Также работает BTW 'sed '/../ &/3g''. – potong

+0

Спасибо за добавление второго решения. – potong

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 
Смежные вопросы