Isso é feito facilmente usando um pequeno script awk .
#!/usr/bin/awk -f
# Write sections of the input file to separate files
# Written by PM 2Ring 2016.06.14
BEGIN{outbase = "outfile"}
/^Model/{outname = outbase $2}
{print > outname}
outbase é o nome do arquivo base. Ele recebe o número do modelo anexado a ele, portanto, para o arquivo de amostra, os arquivos de saída outfile1 , outfile2 , etc serão criados. Com uma pequena alteração no script, você pode definir outbase na linha de comando, usando a opção -v do awk.
O coração deste script é
/^Model/{outname = outbase $2}
Ele diz: Se a linha atual começar com "Modelo", anexe o conteúdo do campo # 2 à sequência outbase , atribuindo o resultado a outname .
Por padrão, o awk processa um arquivo linha por linha, dividindo cada linha em campos usando espaço em branco como o separador de campo.
{print > outname}
simplesmente imprime a linha atual no arquivo cujo nome está armazenado em outname .
Este script é pequeno o suficiente para escrever tudo na linha de comando:
awk 'BEGIN{outbase = "outfile"}; /^Model/{outname = outbase $2}; {print > outname}' infile.txt
Você pode realmente fornecer vários argumentos de arquivo de entrada e eles serão tratados corretamente, contanto que você não tenha números de modelo duplicados.