Вопрос

Допустим, у вас есть файл, содержащий тексты (от 1 до N), разделенные $ $ Как разрезание файла, так что конечным результатом являются n файлы?

text1 с символами новой строки $
text2 $ и т. д.$
текстN

Я думаю что-нибудь с awk или sed, но есть ли какое-нибудь доступное приложение unix, которое уже выполняет такого рода задачи?

Это было полезно?

Решение

Может быть split -p шаблон?

Хм.Возможно, это не совсем то, что вы хотите.Он не разбивает строку, а только начинает новый файл, когда видит шаблон.И похоже, что он поддерживается только в системах, связанных с BSD.

Вы можете использовать что-то вроде:

awk 'BEGIN {RS = "$"} { ... }'

редактировать: Возможно, вы найдете вдохновение для { ... } часть здесь:

http://www.gnu.org/manual/gawk/html_node/Split-Program.html

редактировать: Спасибо за комментарий от dmckee, но csplit также кажется, что копируется вся строка, в которой встречается шаблон.

Другие советы

awk 'BEGIN{RS="$";ORS=""} { textNumber++;напечатайте $0 > "text"textNumber.out" }' имя_файла

Спасибо Биллу Карвину за идею.

Редактировать :Добавьте ORS="" чтобы не печатать новую строку в конце каждого файла.

Если я правильно понимаю, UNIX резать Для этого можно использовать команду.

cut -d $ -f 1- filename

Возможно, у меня немного неправильный синтаксис, но это должно указывать на то, что вы используете поля, разделенные $, и возвращаете поля с 1 по конец.

Возможно, вам придется избежать $.

awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file

используя команду разделения, мы можем разделить, используя строки.

но команда csplit позволит вам разрезать файлы и на основе регулярных выражений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top