Это легко сделать с помощью небольшого скрипта 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
— это имя базового файла. К нему добавляется номер модели, поэтому для файла образца будут созданы выходные файлы outfile1
, outfile2
и т. д. С незначительным изменением скрипта вы можете установить outbase
из командной строки, используя опцию awk -v
.
Суть этого скрипта
/^Model/{outname = outbase $2}
Он гласит: Если текущая строка начинается с «Model», добавьте содержимое поля #2 в строку outbase
, назначив результат outname
.
По умолчанию awk обрабатывает файл строка за строкой, разбивая каждую строку на поля, используя пробелы в качестве разделителя полей.
{print > outname}
просто выводит текущую строку в файл, имя которого хранится в outname
.
Этот скрипт достаточно мал, чтобы записать все это в командной строке:
awk 'BEGIN{outbase = "outfile"}; /^Model/{outname = outbase $2}; {print > outname}' infile.txt
На самом деле вы можете предоставить несколько аргументов входного файла, и они будут обрабатываться правильно, если у вас нет дублированных номеров модели.