通过提取两个关键字之间的行来拆分文件

Split file by extracting lines between two keywords

我有一个包含以下行的文件:

string
string
string
MODEL 1
.
.
.
TER
string 
string
string
MODEL 2
.
.
.
TER

其中有 5000 个这样的 MODEL。我想拆分此文件,以便将开始 MODEL X 和结束 TER(用点显示)的每个部分保存到其自己的文件中,并丢弃其他所有内容。我怎样才能做到这一点?可能与 awksplit?

我检查了其他几个类似的问题,但未能将答案应用到我的案例中。

另请注意,我使用 Mac OS X.

您可以为此使用此 awk:

awk '/^MODEL/{file="model" } file{print > file} /^TER/{close(file); file=""}' file

工作原理:

/^MODEL/               # match lines starting with MODEL
file="model"         # make variable file as model + model_no from column 2
file{...}              # execute of file variable is set
{print>file}           # print each record to file
/^TER/                 # match lines starting with TER
{close(file); file=""} # close file and reset file to ""

然后验证为:

cat model1
MODEL 1
.
.
.
TER

cat model2
MODEL 2
.
.
.
TER

这甚至适用于 dash:

go=false text= model_ID=
while IFS= read line; do
    if   [ "`printf "$line" | grep '^MODEL'`" ]; then
        model_ID="`printf "$line" | sed -e 's/^MODEL //'`"
        go=true
    elif [ "`printf "$line" | grep '^TER'`" ];   then
        printf "$text" > "MODEL_$model_ID"
        text=""
        model_ID=""
        go=false
    else
        $go && text="$text$line\n"
    fi
done