Как вы разделяете файловую базу на токене?

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

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

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

cut -d $ -f 1- filename

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

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

Другие вопросы по тегам