2017-02-14 12 views
0

У меня есть файл, содержащий информацию заголовка данных, за которой следуют записи данных. Каждый заголовок будет другим, и мне нужно добавить информацию из каждого заголовка в каждую строку файла, пока не появится столбец следующего заголовка. Например: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, но я не могу заставить их делать то, что я хочу. Любое руководство будет высоко оценено.

+1

Префикс вашего кода/данных с четырьмя пробелами. Пожалуйста, взгляните на [edit-help] (http://stackoverflow.com/editing-help). – Cyrus

ответ

0

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

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

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

0

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

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

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