使用模式和文件名拆分文件

使用模式和文件名拆分文件

我有一个具有特定模式的文件内容,我想在模式匹配后将该文件拆分为多个文件,并使用模式名称作为输出文件名。例子

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

相关内容