Как разделить файловую базу на токен?
-
08-07-2019 - |
Вопрос
Допустим, у вас есть файл, содержащий тексты (от 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 позволит вам разрезать файлы и на основе регулярных выражений.