Как вы разделяете файловую базу на токене?
Допустим, вы получили файл, содержащий тексты (от 1 до N), разделенные символом $. Как можно разрезать файл, чтобы конечный результат составил N файлов?
text1 с символами новой строки $
text2 $ и т. д.... $
textN
Я думаю что-то с awk или sed, но есть ли какое-нибудь доступное приложение для Unix, которое уже выполняет такую задачу?
5 ответов
Может быть split -p
шаблон?
Хм. Это может быть не совсем то, что вы хотите. Он не разбивает строку, он только начинает новый файл, когда видит шаблон. И, похоже, поддерживается только в системах, связанных с BSD.
Вы можете использовать что-то вроде:
awk 'BEGIN {RS = "$"} { ... }'
редактировать: вы можете найти вдохновение для { ... }
часть здесь:
http://www.gnu.org/manual/gawk/html_node/Split-Program.html
редактировать: спасибо комментарий от dmckee, но csplit
также, кажется, копировать всю строку, на которой происходит шаблон.
awk 'BEGIN{RS="$"; ORS=""} { textNumber++; print $0 > "text"textNumber".out" }' fileName
Спасибо Биллу Карвину за идею.
Редактировать: добавить ORS = "", чтобы избежать печати новой строки в конце каждого файла.
Используя команду split, мы можем разделить строки.
но команда csplit позволит вам разрезать файлы и на основе регулярных выражений.
Если я правильно понял, команда UNIX cut может быть использована для этого.
cut -d $ -f 1- filename
Я мог бы немного отключить синтаксис, но это должно сказать cut, что вы используете поля, разделенные $, и возвращать поля 1 до конца.
Возможно, вам придется убежать от $.