Python 根据特定模式将单个文本文件分离为多个文件
假设我有以下文件:(Song.txt) 我想将此文件分为三个文件,如下所示: 第一个文件名应该是Song_1.txtPython 根据特定模式将单个文本文件分离为多个文件,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 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]