Python 根据特定模式将单个文本文件分离为多个文件

Python 根据特定模式将单个文本文件分离为多个文件,python,perl,unix,awk,grep,Python,Perl,Unix,Awk,Grep,假设我有以下文件:(Song.txt) 我想将此文件分为三个文件,如下所示: 第一个文件名应该是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的可

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

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

第一个文件名应该是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的可用工具和语言来实现这一点?

csplit
可用于使用regex拆分文本文件。

csplit
可用于使用regex拆分文本文件

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

这应该会有所帮助-

gawk -v RS="Song" 'NF{ print RS$0 > "Song_"++n".txt" }' Song.txt
测试: 这应该会有所帮助-

gawk -v RS="Song" 'NF{ print RS$0 > "Song_"++n".txt" }' Song.txt
测试:
:这更好。。我将努力理解它是如何写的thanks@user1421408不客气。我们在这里所做的是将记录分隔符设置为
Song
。这把所有的歌曲分开<代码>$0标记所有其他内容。由于您需要在个人文件中输入单词“Song”,因此我们输出
RS$0
,而不是编写单词“Song”<代码>++n确保我们将每条记录写入一个新文件,并以一个数字递增
NF
确保我们不会将第一个文件作为
Song
编写。希望这有帮助!:这样更好。。我将努力理解它是如何写的thanks@user1421408不客气。我们在这里所做的是将记录分隔符设置为
Song
。这把所有的歌曲分开<代码>$0标记所有其他内容。由于您需要在个人文件中输入单词“Song”,因此我们输出
RS$0
,而不是编写单词“Song”<代码>++n确保我们将每条记录写入一个新文件,并以一个数字递增
NF
确保我们不会将第一个文件作为
Song
编写。希望这有帮助!
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]