2016-07-28 4 views
1

У меня есть файл с 200 000 строк. Начало каждой строки начинается с «IMAGE», «HISTO» или «FRAG». Мне нужно объединить линии HISTO и FRAG с линией IMAGE. Вот пример.Соединительные линии на основе первого поля patern

IMAGE Lots of Data on this line 
HISTO usually numbers 0 0 1 1 0 1 0 
FRAG Always at least 1 of these lines but can be more 

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

>IMAGE Lots of Data on this line HISTO usually numbers 0 0 1 1 0 1 0 FRAG Always at least 1 of these lines but can be more 

Можно иметь много осколочных линии, прежде чем он начнет через с IMAGE линии. Я использую mac, поэтому я могу использовать практически любой инструмент, но я больше всего знаком с vi.

+0

Пожалуйста, обратите внимание на [редактирование-помощь] (http://stackoverflow.com/editing-help). – Cyrus

+0

@ Джеймс Браун, первое решение хорошо работало. Измененная версия оставляет пространство перед первой строкой. Нет biggie, но я должен удалить его в excel, или мои колонки смешиваются. –

ответ

4

AWK:

awk '/^IMAGE/&&NR>1 {print a; a=""} {a=a""$0" "} END{print a}' test.in 

Вслух:

/^IMAGE/ && NR>1 { # if it starts with IMAGE 
    print a  # empty buffer variable to output 
    a=""   # reset the buffer after emptying 
} 
{     # for all records 
    a=a""$0" "  # append to the buffer variable, prob. no need for "" 
} 
END {    # in the end 
    print a   # empty the remaining buffer in the end 
} 
+0

Используйте 'next', не проверяйте все значения. –

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