Separe un solo archivo de texto en varios archivos según cierto patrón

Supongamos que tengo el siguiente archivo: (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 

Quiero separar este archivo en tres archivos para que sean como los siguientes:

El primer nombre de archivo debe ser Song_1.txt

 Song One bla bla bla bla bla bla bla bla bla 

El segundo nombre de archivo debe ser Song_2.txt

 Song two yaya ya yaa blaaa bla bla blaaaaa 

El tercer nombre de archivo debe ser Song_3.txt

 Song three bla bla bla 

¿Cómo puedo hacer esto usando awk, grep, perl, python y / o cualquier herramienta o idioma disponible basada en Unix?

Esto debería ayudar …

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

Prueba:

 [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] 
 csplit Song.txt --elide-empty-files --prefix=Song_ --suffix-format='%1d.txt' '/Song one/' '/Song two/' '/Song three/' 

o

 csplit Song.txt -z -f Song_ -b '%1d.txt' '/Song one/' '/Song two/' '/Song three/' 

csplit se puede usar para dividir un archivo de texto usando una expresión regular.