패턴과 파일 이름을 사용하여 파일 분할

패턴과 파일 이름을 사용하여 파일 분할

특정 패턴의 파일 콘텐츠가 있는데 패턴 매칭 후 파일을 여러 파일로 분할하고 패턴 이름을 출력 파일 이름으로 사용하고 싶습니다. 예

P1_1r6r

NRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINV LRGFRKEIG-    RMLNILNRRRRRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIP

P1_1sfk

MALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEIGRMLNILNRRRRRVSTVQQ LTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEI

P1_12562 RFSLPLKLFMALVAFLRFLTIPPTAGILKRWGTIKKSKAINVLRGFRKEIGRM LNILNRRRRRVSTVQQLTKRFSLGMLQGRGPLKLFMALVAFLRFLTIPPTAGILKRWGTI

따라서 여기서의 패턴은 P1위 파일을 1r6r,1sfk,12562.

답변1

방법:

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

관련 정보