我有一个文本文件,中间有一个标记:
one
two
three
blah-blah *MARKER* blah-blah
four
five
six
...
我只需将此文件拆分为两个文件,首先包含 MARKER 之前的所有内容,第二个文件包含 MARKER 之后的所有内容。看来它可以用awk或sed在一行中完成,我只是无法弄清楚如何。
我尝试了简单的方法 - 使用csplit
,但csplit不能很好地使用Unicode文本。
答案 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更好。