Допустим, у вас есть файл, содержащий тексты (от 1 до N), разделенные символом $ Как можно разрезать файл так, чтобы конечным результатом было N файлов?
text1 with newlines $
text2 $etc... $
textN
Я что-то думаю о awk или sed, но есть ли доступное приложение unix, которое уже выполняет такую задачу?





Может, split -pшаблон?
Хм. Возможно, это не совсем то, что вам нужно. Он не разбивает строку, а только запускает новый файл, когда видит шаблон. И похоже, что он поддерживается только в системах, связанных с BSD.
Вы можете использовать что-то вроде:
awk 'BEGIN {RS = "$"} { ... }'
редактировать: Вы можете найти вдохновение для части { ... } здесь:
http://www.gnu.org/manual/gawk/html_node/Split-Program.html
редактировать: Благодаря комментарию dmckee, но csplit, похоже, также копирует всю строку, в которой встречается шаблон.
В Mac OS это есть. Также рассмотрите "csplit".
Я использую Mac OS X, основанную на BSD UNIX. См. freebsd.org/cgi/man.cgi?query=split
Я понял, что часть RS в сценарии awk, это часть "...", которая все еще озадачивала меня. Кстати, у split нет -p на cygwin.
Cygwin основан на GNU, а не на BSD. Но это не имеет значения, split -p - это не то, что вам нужно.
См. Ссылку выше на программу GNU awk, которая разбивается на несколько файлов.
Если я правильно понимаю, для этого можно использовать команду UNIX резать.
cut -d $ -f 1- filename
Возможно, у меня немного нет синтаксиса, но это должно сказать cut, что вы используете поля, разделенные $, и возвращаете поля с 1 до конца.
Возможно, вам придется экранировать $.
Разве это не на строку, и при этом не создается несколько файлов?
awk 'BEGIN{RS = "$"; ORS = ""} { textNumber++; print $0 > "text"textNumber".out" }' fileName
Спасибо Биллу Карвину за идею.
Обновлено: добавьте ORS = "", чтобы не печатать новую строку в конце каждого файла.
awk -vRS = "$" '{ print $0 > "text"t++".out" }' ORS = "" file
используя команду split, мы можем разделить, используя строки.
но команда csplit позволит вам разрезать файлы также на основе регулярных выражений.
Хммм, у моего
splitнет опции-p- на какой ОС она установлена?