awk: добавление разделителя записей ко всем строкам - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь переформатировать некоторые структурированные данные, как показано ниже, в табличный формат с разделителями.Число строк для каждой записи является переменным, но количество столбцов не является (на самом деле это пять, а не три).

title1
data data data
data data data
data data data
title22
data data data
data data data
title333
data data data

Результат должен выглядеть следующим образом (дополнительный столбец для разделителя записей):

title1 data data data
title1 data data data
title1 data data data
title22 data data data
title22 data data data
title333 data data data

С помощью awk разделитель записей достаточно легко откорректировать с помощью "title[0-9]+", но я не могу добавить это к строкам, которые соответствуют каждой отдельной записи.

awk '{RS="title[0-9]+"}{print RT $0}' file

Не обязательно должен быть awk, если sed или что-то еще работает лучше.

Ответы [ 3 ]

0 голосов
/ 03 февраля 2019

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

 sed -E '/^title/h;//d;G;s/(.*)\n(.*)/\2 \1/' file

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

0 голосов
/ 04 февраля 2019

Еще один awk для общего ответа ..

awk '  { if(NF>1) {print title,$0 } else { title=$0} } '

с входными данными:

$ cat drcatfish.txt
title1
data data data
data data data
data data data
title22
data data data
data data data
title333
data data data

$ awk '  { if(NF>1) {print title,$0 } else { title=$0} } ' drcatfish.txt
title1 data data data
title1 data data data
title1 data data data
title22 data data data
title22 data data data
title333 data data data

$
0 голосов
/ 02 февраля 2019

Не могли бы вы попробовать следующее.

awk '/^title/{val=$0;next} {print val,$0}'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...