sed / awk / perl: найдите регулярное выражение, скопируйте 5 столбцов этой строки и вставьте в него в начале следующих строк - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть следующие строки:

057         -   -   No    adod3 stptazlqn    10    753
tlm    10    027        
stp    10    021                
12         -   -   No    azad1
bbcz     30    12        
03085         -   -   No    azad1 azad1222
xxaz    1    12        
azzst    1    12        
hss     2    12 

, что мне нужно сделать:

  1. Найти строки, начинающиеся с цифры [0-9].
  2. Скопируйте первые 5 столбцов через пробел ''.
  3. Вставьте его в следующие строки, не начиная с цифры.
057         -   -   No    adod3 stptazlqn    10    753
057         -   -   No    adod3     tlm    10    027        
057         -   -   No    adod3     stp    10    021                
12         -   -   No    azad1
12         -   -   No    azad1    bbcz     30    12        
03085         -   -   No    azad1 azad1222
03085         -   -   No    azad1    xxaz    1    12        
03085         -   -   No    azad1    azzst    1    12        
03085         -   -   No    azad1    hss     2    12

СпасибоЗа любую помощь заранее.

Приветствия, Слав

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Это может сработать для вас (GNU sed):

sed -r '/^[0-9]/!G;s/(.*\S)\s*\n((\S+\s*){5}).*/\2 \1/;h' file

Использовать сопоставление с шаблоном, чтобы извлечь поля из строки, начинающейся с целого числа, которое будет добавлено к строке, которая этого не делала.

Для правильного выравнивания столбцов используйте:

sed -r '/^[0-9]/!G;s/(.*\S)\s*\n((\S+\s*){5}).*/\2 \1/;h' file | column -t
0 голосов
/ 27 сентября 2018

awk на помощь!

$ awk '{if($1+0==$1) p=$1 FS $2 FS $3 FS $4 FS $5; else $0=p FS $0}1' file | column -t

057    -  -  No  adod3  stptazlqn  10  753
057    -  -  No  adod3  tlm        10  027
057    -  -  No  adod3  stp        10  021
12     -  -  No  azad1
12     -  -  No  azad1  bbcz       30  12
03085  -  -  No  azad1  azad1222
03085  -  -  No  azad1  xxaz       1   12
03085  -  -  No  azad1  azzst      1   12
03085  -  -  No  azad1  hss        2   12

здесь FS - это разделитель поля, по умолчанию это пробел.Проверка номера проводится с добавлением нуля;труба до column для красивого форматирования.1 в конце - это сокращение для печати строки (переменная $0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...