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.