Awk строки манипуляции - PullRequest
       3

Awk строки манипуляции

2 голосов
/ 28 декабря 2011

У меня есть строка:

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 (?)).

Ответы [ 3 ]

4 голосов
/ 02 января 2012
echo 20120113083000Z |  awk 'BEGIN { FS = "" } ; { print $1$2$3$4, $5$6, $7$8, $9$10, $11$12, $13$14, $15 }'
3 голосов
/ 02 января 2012

Это может работать для меня:

echo '20120113083000Z' |   awk '{gsub(/../,"& ");sub(/ /,"")}1'
2012 01 13 08 30 00 Z
3 голосов
/ 28 декабря 2011
$ echo 20120113083000 |  sed 's/../& /g; s/ //' | awk '{print mktime($0)}'
$ echo 20120113083000 |  awk '{print mktime(gensub(/ /, "", "1", gensub(/../, "& ", "g")))}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...