2012-06-27 3 views
-3

У меня есть это целое число 20120305193821, и я хотел бы разбить его на несколько частей 2012-03-05-19:38:21 для дальнейшего использования в awk. Может ли кто-нибудь помочь?awk split integer на несколько частей

+4

Что вы пробовали? Мы ожидаем, что вы, по крайней мере, попытались сделать это сами, вместо того, чтобы просто «прописать кодз». –

+0

Мысль о расщеплении его с помощью sprintf() или printf(), но не имеет понятия, чтобы разделить целое на более мелкие части. split() не может использоваться ни потому, что нет FS, я могу разбить целое число на. Мог бы попробовать его с двумя массивами, один для разделения на index() sp = 4,2,2,2,2,2, а другой на распечатку в качестве функции. У вас нет короткого решения, вот почему я задал этот вопрос. – sdf

ответ

4

Если вы используете Gawk, вы можете использовать FIELDWIDTHS:

echo 20120305193821 | gawk '{printf "%s-%s-%s-%s:%s:%s\n", 
     $1, $2, $3, $4, $5, $6}' FIELDWIDTHS="4 2 2 2 2 2" 
+0

FIELDWIDTHS - это что-то новое для меня. Большое спасибо! – sdf

2

Почему бы не использовать подстроки? Это просто скучно писать, но как вы намекаете, у вас есть индексы?

echo "20120305193821" | awk '{printf "%s-%s-%s-%s:%s:%s\n",substr($1,1,4),substr($1,5,2),substr($1,7,2),substr($1,9,2),substr($1,11,2),substr($1,13,2)}' 

выход:

2012-03-05-19: 38: 21

2

Я знаю, что вы Бесполезный 't tag pretty sed поэтому просто разместите здесь для справки -

$ echo 20120305193821 | sed 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1-\2-\3-\4:\5:\6/' 
2012-03-05-19:38:21 
Смежные вопросы