2016-04-15 5 views
0

Я должен повторить значение ключа после каждых 14 символов в строкеКак повторить ключевое значение для каждого столбца в файле фиксированной длины

Мой файл выглядит следующим образом:

KEYVALUE1 201604141111I201604141111C201604141111D201604141111E201604141111F 
KEYVALUE1 201604141111G 
KEYVALUE2 201604141111I201604141111C201604141111D201604141111E201604141111F 
KEYVALUE2 201604141111G201604141111F 
KEYVALUE3 201604141111I 
KEYVALUE4 201604141111G201604141111I 

Мой выход должен выглядеть так:

KEYVALUE1 201604141111I 
KEYVALUE1 201604141111C 
KEYVALUE1 201604141111D 
KEYVALUE1 201604141111F 
KEYVALUE1 201604141111G 
KEYVALUE2 201604141111I 
KEYVALUE2 201604141111C 
KEYVALUE2 201604141111D 
KEYVALUE2 201604141111F 
KEYVALUE2 201604141111G 
KEYVALUE2 201604141111F 
KEYVALUE3 201604141111I 
KEYVALUE4 201604141111G 
KEYVALUE4 201604141111I 

Пожалуйста, помогите.

ответ

1

СЭД для простых замен на отдельных линиях, то есть все. Для всего, что вы должны использовать AWK для простоты, ясности, надежности, мобильности, эффективности и большинство других желательных качеств программного обеспечения:

$ awk '{ while ($2!="") { print $1, substr($2,1,13); $2=substr($2,14) } }' file 
KEYVALUE1 201604141111I 
KEYVALUE1 201604141111C 
KEYVALUE1 201604141111D 
KEYVALUE1 201604141111E 
KEYVALUE1 201604141111F 
KEYVALUE1 201604141111G 
KEYVALUE2 201604141111I 
KEYVALUE2 201604141111C 
KEYVALUE2 201604141111D 
KEYVALUE2 201604141111E 
KEYVALUE2 201604141111F 
KEYVALUE2 201604141111G 
KEYVALUE2 201604141111F 
KEYVALUE3 201604141111I 
KEYVALUE4 201604141111G 
KEYVALUE4 201604141111I 
+1

Спасибо ED .. Это работает как драгоценный камень:) Я просто сделал небольшое редактирование с позиций. его 14 символов вместо 13. Вывести изменение, моя команда выглядит так: awk '{while ($ 2! = "") {print $ 1, substr ($ 2,1,14); $ 2 = substr ($ 2,15)}} '$ FILE_NAME> BREAK_FILE – Mahesh

0

Вы можете попробовать это sed:

sed -n '/^\([^ ]* \)\(.\{13\}\)/{s/^\([^ ]* \)\(.\{13\}\)/&\n\1/g;P;D;}' file 
+0

это работает отлично, но если у меня есть такие данные, как KEYVALUE2 201604141111G201604141111F, тогда я получаю строки только с ключевыми значениями и пробелами, которые не предназначены. Но все-таки отличная альтернатива :) Я тоже FED FAN :) – Mahesh

0

Или это одно:

sed '{ 
    :j 
    /^[^ ]* .\{13\}.\{13\}/ { 
    h 
    s/^\([^ ]*\) \(.\{13\}\)\(.*\)$/\1 \2/ 
    p 
    x 
    s/^\([^ ]*\) \(.\{13\}\)\(.*\)$/\1 \3/ 
    h 
    b j 
    } 
}' file 
1

Если вы открыты для PERL:

perl -lane 'print "$F[0] $_" for $F[1] =~/.{13}/g' file 

 Смежные вопросы

  • Нет связанных вопросов^_^