使用bash脚本将文本文件拆分为两个

时间:2010-09-04 22:40:17

标签: bash text sed awk split

我有一个文本文件,中间有一个标记:

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

我只需将此文件拆分为两个文件,首先包含 MARKER 之前的所有内容,第二个文件包含 MARKER 之后的所有内容。看来它可以用awk或sed在一行中完成,我只是无法弄清楚如何。

我尝试了简单的方法 - 使用csplit,但csplit不能很好地使用Unicode文本。

4 个答案:

答案 0 :(得分:10)

你可以用awk轻松完成

awk -vRS="MARKER" '{print $0>NR".txt"}' file

答案 1 :(得分:5)

试试这个:

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

它将从final.txt读取输入并生成out1.txt,out2.txt等...

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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更好。