Предполагается, что вы используете bash в качестве оболочки. Для других оболочек реальное решение может быть другим.
Предположим, ваши данные в data
:
i=0 ; cat data | while read line ; do \
if [ "$line" == "[PATTERN]" ] ; then \
i=$(($i + 1)) ; touch file.$i ; continue ; \
fi ; echo "$line" >> file.$i ; \
done
Измените [PATTERN]
на ваш фактический шаблон разделения.
Это создаст файлы file.1
, file.2
и т. Д.
Редактировать: ответ на запрос о решении awk:
awk '/^\[PATTERN\]$/{close("file"f);f++;next}{print $0 > "file"f}' data
Идея состоит в том, чтобы каждый раз открывать новый файл [PATTERN]
(пропуская эту строку - команда next
), и записывать все последующие строки в этот файл. Если вам нужно включить [PATTERN]
в ваши сгенерированные файлы, удалите команду next
.
Обратите внимание на экранирование [
и ]
, которые имеют особое значение для регулярных выражений. Если ваш шаблон не содержит их, вам не нужно убегать. Рекомендуется использовать ^
и $
, поскольку они привязывают ваш шаблон к началу и концу строки, что вам обычно требуется.