Use awk
com PP_NAME_
como o separador de registro:
awk -v RS='PP_NAME_' -v FS='\n' '/./ {print | "tail -n +2 >FILE"$1}' input
awk
lê em um "registro" de cada vez e divide cada registro em "campos". Nesse caso, o uso RS='PP_NAME_'
define um registro como todo o texto até a próxima instância dos caracteres PP_NAME_
. O separador de campo, FS
, é igual a uma nova linha. Isso significa que cada linha é um "campo". Definido desta forma, cada registro começa com uma linha contendo o número do arquivo no qual queremos gravar o registro. A gravação real do registro no arquivo é feita com: print | "tail -n +2 >FILE"$1
. Como $1
é o número que permanece na primeira linha, "FILE"$1
é o nome do arquivo de saída que queremos gravar. Queremos escrever tudo no registro para aquele arquivo exceto para a primeira linha que possui o número. O uso do comando shell tail -n +2
remove a primeira linha.
O primeiro registro lido é todo o texto antes da primeira ocorrência de PP_NAME_
. Isso significa que o primeiro registro lido está vazio. Como não queremos escrever isso, a expressão regular /./
é colocada antes do comando print
. Essa regex corresponde a qualquer registro não vazio. Isso significa que elimina o registro vazio que não queríamos.