2017-02-22 6 views
-2

Как разбить строку 201702221015 в формате CCYY|MM|DD|HH|MN с использованием AWK, то есть разбить строку 201702221015, чтобы 2017|02|22|10|15?Как разбить строку 201702221015 в ввгг | MM | DD | HH | формат MN с использованием AWK

+0

Возможный дубликат [разделение строки на массив с помощью awk] (http://stackoverflow.com/questions/8009664/split-string-to-array-using-awk) –

ответ

2

@Hanif: Try (хотя я не уверен, что о требовании):

echo "201702221015" | awk '{print substr($0,1,4)"|"substr($0,5,2)"|"substr($0,7,2)"|"substr($0,9,2)"|"substr($0,11,2)}' 
+0

Простое и простое решение (+1) –

0

Зачем использовать AWK? СЭД имеет смысл:

echo "201702221015" | sed -E 's/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1|\2|\3|\4|\5/' 
+3

wrt 'sed делает больше смысла' - sed только имеет больше смысла, чем awk, если вы вызываете однострочный ключ из командной строки, чтобы сделать это одну конкретную вещь (но тогда вы также должны рассмотреть возможность использования ваших оболочек, встроенных в механизмы замещения вместо sed). Однако, если вы пишете скрипт для управления текстом вообще, тогда вы должны использовать awk, и поэтому использование sed для этой части не имеет никакого смысла. –

3

Один из способов с GNU AWK для gensub():

$ awk 'BEGIN{print gensub(/(..)(..)(..)(..)$/,"|\\1|\\2|\\3|\\4",1,201702221015)}' 
2017|02|22|10|15 
2

другое решение, используя gnu-awk и FIELDWIDTHS

echo "201702221015" | awk 'BEGIN{FIELDWIDTHS = "4 2 2 2 2"; OFS="|"}$1=$1' 

вы получите,

2017|02|22|10|15 
Смежные вопросы