通过提取两个关键字之间的行来拆分文件
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
(用点显示)的每个部分保存到其自己的文件中,并丢弃其他所有内容。我怎样才能做到这一点?可能与 awk
或 split
?
我检查了其他几个类似的问题,但未能将答案应用到我的案例中。
另请注意,我使用 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
我有一个包含以下行的文件:
string
string
string
MODEL 1
.
.
.
TER
string
string
string
MODEL 2
.
.
.
TER
其中有 5000 个这样的 MODEL
。我想拆分此文件,以便将开始 MODEL X
和结束 TER
(用点显示)的每个部分保存到其自己的文件中,并丢弃其他所有内容。我怎样才能做到这一点?可能与 awk
或 split
?
我检查了其他几个类似的问题,但未能将答案应用到我的案例中。
另请注意,我使用 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