Bash Добавлять информацию заголовка к каждой строке файла, пока не будет найден следующий заголовок

У меня есть файл, содержащий информацию заголовка данных, за которой следуют записи данных. Каждый заголовок будет другим, и мне нужно добавить информацию из каждого заголовка в каждую строку файла, пока не встретится следующий заголовок. Например:

"Header 1","head1_info" date1,data1 date1,data2 "Header 2","head2_info" date3,data5 data4,data6

Я хочу, чтобы этот файл был добавлен к:

    `"Header 1","head1_info"
    head1_info,date1,data1
    head1_info,date1,data2
    "Header 2","head2_info"
    head2_info,date3,data5
    head2_info,date4,data6`

Я пытался назначить grep переменной, но я не знаю, как заставить ее перейти от к следующей, как только она встретит «Заголовок 2», я также экспериментировал с sed и awk, но я не могу заставить их делать то, что я хочу либо. Мы будем очень признательны за любые рекомендации.


person 5r9n    schedule 14.02.2017    source источник


Ответы (2)


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

sed -r '/^"/h;//!{G;s/(.*)\n.*"(.*)"/\2,\1/}' file

При обнаружении строки заголовка сохраните ее в области удержания. Для всех остальных строк добавьте пробел к пространству шаблона и замените требуемую информацию, используя обратные ссылки.

person potong    schedule 14.02.2017

Предполагая, что любая строка, содержащая двойную кавычку, указывает на строку заголовка:

awk '/"/{a=$2;gsub("\"","",a); print; next}{print a FS $0}' FS=, input

Если есть какой-то другой метод определения заголовка, просто измените шаблон, совпавший в начале. (Это записывает значение столбца 2 из строк заголовка в переменную a. gsub просто удаляет двойные кавычки.)

person William Pursell    schedule 14.02.2017