1

假设我有以下文件:(Song.txt)

Song one
bla bla bla bla 
bla bla bla bla bla
Song two
yaya ya yaa 
blaaa bla bla blaaaaa
Song three
bla bla bla

我想将此文件分成三个文件,如下所示:

第一个文件名应该是 Song_1.txt

Song One
bla bla bla bla 
bla bla bla bla bla

第二个文件名应该是 Song_2.txt

Song two
yaya ya yaa 
blaaa bla bla blaaaaa

第三个文件名应该是 Song_3.txt

Song three
bla bla bla

如何使用 awk、grep、perl、python 和/或任何可用的基于 unix 的工具和语言来做到这一点?

4

3 回答 3

4
csplit Song.txt --elide-empty-files --prefix=Song_ --suffix-format='%1d.txt' '/Song one/' '/Song two/' '/Song three/'

或者

csplit Song.txt -z -f Song_ -b '%1d.txt' '/Song one/' '/Song two/' '/Song three/'
于 2012-05-28T20:48:54.210 回答
3

csplit可用于使用正则表达式拆分文本文件。

于 2012-05-28T20:21:17.520 回答
2

这应该有帮助 -

gawk -v RS="Song" 'NF{ print RS$0 > "Song_"++n".txt" }' Song.txt

测试:

[jaypal:~/Temp] cat Song.txt 
Song one
bla bla bla bla 
bla bla bla bla bla
Song two
yaya ya yaa 
blaaa bla bla blaaaaa
Song three
bla bla bla

[jaypal:~/Temp] gawk -v RS="Song" 'NF{ print RS$0 > "Song_"++n".txt" }' Song.txt

[jaypal:~/Temp] ls -l S*
-rw-r--r--  1 jaypalsingh  staff  113 28 May 17:55 Song.txt
-rw-r--r--  1 jaypalsingh  staff   47 28 May 18:06 Song_1.txt
-rw-r--r--  1 jaypalsingh  staff   45 28 May 18:06 Song_2.txt
-rw-r--r--  1 jaypalsingh  staff   24 28 May 18:06 Song_3.txt

[jaypal:~/Temp] cat Song_1.txt 
Song one
bla bla bla bla 
bla bla bla bla bla

[jaypal:~/Temp] cat Song_2.txt 
Song two
yaya ya yaa 
blaaa bla bla blaaaaa

[jaypal:~/Temp] 
于 2012-05-28T22:07:07.687 回答