我有一个具有特定模式的文件内容,我想在模式匹配后将该文件拆分为多个文件,并使用模式名称作为输出文件名。例子
P1_1r6r
NRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINV LRGFRKEIG- RMLNILNRRRRRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIP
P1_1sfk
MALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEIGRMLNILNRRRRRVSTVQQ LTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEI
P1_12562 RFSLPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEIGRM LNILNRRRRRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTI
所以,这里的模式是P1
,我想将上面的文件分成3个不同的文件内容,文件名类似于1r6r,1sfk,12562
.
答案1
awk方法:
awk '$1~/^P1_[0-9a-z]+/{ fn=substr($1,4); if(NF>1) { $1=""; print >> fn} next }
NF && fn{ print >> fn }' file
查看结果:
$ head 1*
==> 12562 <==
RFSLPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEIGRM LNILNRRRRRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTI
==> 1r6r <==
NRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINV LRGFRKEIG- RMLNILNRRRRRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIP
==> 1sfk <==
MALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEIGRMLNILNRRRRRVSTVQQ LTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEI