Разделение каждой строки в файле в определенных точках - PullRequest
3 голосов
/ 20 ноября 2011

У меня есть файл словаря, отформатированный так:

 A B [C] D

Где a - слово (без пробелов), B - другое слово (без пробелов внутри него), C - произношение (здесь есть пробелы), а D - определение, выраженное словами (есть пробелы, и различные символы).

Я хочу разделить его на 4 части, например:

 A@@@@B@@@@C@@@@D

Таким образом, первый пробел преобразуется в @@@@, первый [ преобразуется в @@@@, а первый ] преобразуется в @@@@. Это позволит легко импортировать в электронную таблицу как CSV (@@@@ в качестве запятых).

Может ли это быть достигнуто с помощью awk или другого инструмента в BASH?

Обновление:

Вот несколько примеров:

一千零一夜 一千零一夜 [Yi1 qian1 ling2 yi1 ye4] /The Book of One Thousand and One Nights/
灰姑娘 灰姑娘 [Hui1 gu1 niang5] /Cinderella/a sudden rags-to-riches celebrity/
雪白 雪白 [xue3 bai2] /snow white/

Будет преобразовано в:

一千零一夜@@@@一千零一夜 @@@@Yi1 qian1 ling2 yi1 ye4@@@@ /The Book of One Thousand and One Nights/
灰姑娘@@@@灰姑娘 @@@@Hui1 gu1 niang5@@@@ /Cinderella/a sudden rags-to-riches celebrity/
雪白@@@@雪白 @@@@xue3 bai2@@@@ /snow white/

Учтите, что после третьего набора @@@@ может появиться что угодно, в том числе больше пробелов, [ и т. Д., Однако до третьего @@@@ все согласовано по формату.

1 Ответ

5 голосов
/ 20 ноября 2011

Я думаю, что sed будет проще:

sed -e 's/ /@@@@/' -e 's/ [/@@@@/' -e 's/] /@@@@/' infile > outfile

По умолчанию (т. Е. Если вы не указали модификатор g в конце), подстановки будут работать только один раз на строку.

Или, если вы хотите сделать это на месте:

sed -i -e 's/ /@@@@/' -e 's/ [/@@@@/' -e 's/] /@@@@/' infile

(но не все версии sed поддерживают это, и вы потеряете свой входной файл)

...