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