Как вы разделяете файловую базу на токене? - PullRequest
1 голос
/ 14 ноября 2008

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

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

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

Ответы [ 5 ]

3 голосов
/ 14 ноября 2008

awk 'BEGIN {RS = "$"; ORS = ""} {textNumber ++; print $ 0> "text" textNumber ".out"} 'fileName

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

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

2 голосов
/ 14 ноября 2008

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

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

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

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

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

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

edit: Благодаря комментарию от dmckee, но csplit, похоже, также копирует всю строку, в которой встречается шаблон.

1 голос
/ 06 января 2010

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

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

1 голос
/ 06 января 2010
awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file
1 голос
/ 14 ноября 2008

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

cut -d $ -f 1- filename

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...