разбить текстовый файл на две части, используя скрипт bash - PullRequest
7 голосов
/ 05 сентября 2010

У меня есть текстовый файл с маркером где-то посередине:

one
two
three
blah-blah *MARKER* blah-blah
four
five
six
...

Мне просто нужно разделить этот файл на два файла, первый из которых содержит все до MARKER , а второй - все после MARKER . Кажется, это можно сделать в одну строку с помощью awk или sed, я просто не могу понять, как.

Я попробовал простой способ - использовать csplit, но csplit плохо работает с текстом Unicode.

Ответы [ 4 ]

10 голосов
/ 17 января 2011

Вы можете сделать это легко с помощью awk

awk -vRS="MARKER" '{print $0>NR".txt"}' file
5 голосов
/ 05 сентября 2010

Попробуйте это:

awk '/MARKER/{n++}{print >"out" n ".txt" }' final.txt

Он будет читать входные данные из final.txt и выдает out1.txt, out2.txt и т. Д. *

3 голосов
/ 05 сентября 2010
sed -n '/MARKER/q;p' inputfile > outputfile1
sed -n '/MARKER/{:a;n;p;ba}' inputfile > outputfile2

Или все в одном:

sed -n -e '/MARKER/! w outputfile1' -e'/MARKER/{:a;n;w outputfile2' -e 'ba}' inputfile
1 голос
/ 05 сентября 2010

Команда split почти сделает то, что вы хотите:

$ split -p '\*MARKER\*' splitee 
$ cat xaa
one
two
three
$ cat xab
blah-blah *MARKER* blah-blah
four
five
six
$ tail -n+2 xab
four
five
six

Возможно, это достаточно близко для ваших нужд.

Понятия не имею, работает ли он лучше с Unicode, чем csplit.

...