Sed/Awk - вытягивание линий между рисунком x и y

У меня есть большие CSV файлы, где я бы хотел извлечь все данные между строкой X, которая включает в себя шаблон 'x' и Line Y, который включает в себя шаблон 'y'

Например:

other_data
Header
data
data
data
Footer
other_data

Я хочу иметь возможность передавать все между (и включая) Header → Footer в новый файл.

Спасибо!

Ответ 1

Используя awk, это довольно просто:

awk '/Header/ { show=1 } show; /Footer/ { show=0 }'

В основном сохранить состояние в переменной с именем show. Когда мы попадаем в заголовок, мы включаем его, Footer мы выключаем его. Когда он включен, правило show выполняет действие по умолчанию для записи записи.

Ответ 2

Это довольно просто в sed:

sed -n '/Header/,/Footer/p'

или

sed '/Header/,/Footer/!d'

Ответ 3

Другой способ: awk:

awk '/Header/,/Footer/' file
Header
data
data
data
Footer

Просто перенаправьте вывод для сохранения в новом файле:

awk '/Header/,/Footer/' file > newfile

Ответ 4

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

 sed '/^Header/,/^Footer/w new_file' file