파일의 나머지 부분에 영향을 주지 않고 줄 이름을 새로운 이름 집합으로 바꿉니다.

파일의 나머지 부분에 영향을 주지 않고 줄 이름을 새로운 이름 집합으로 바꿉니다.

>나는 각 서열 이름이 다음 줄의 해당 서열을 사용하여 식별되는 큰 단백질 서열 파일을 가지고 있습니다 .

예(따옴표 무시):

>YAL003W EFB1 SGDID:S000000003, Chr I from 142174-142253,142620-143160, Genome Release 64-1-1, Verified ORF, "Translation elongation factor 1 beta; stimulates nucleotide exchange to regenerate EF-1 alpha-GTP for the next elongation cycle; part of the EF-1 complex, which facilitates binding of aminoacyl-tRNA to the ribosomal A site"
MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
LDDLQQSIEEDEDHVQSTDIAAMQKL*

대부분의 이름 텍스트를 제거하여 다음과 같이 보이도록 하고 싶습니다(따옴표 무시).

>YAL003W EFB1
MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
FDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
LDDLQQSIEEDEDHVQSTDIAAMQKL*

이름은 한 줄로만 계산되지만 시퀀스는 여러 줄로 계산되므로 내 질문입니다. 이 문제를 어떻게 해결할 수 있나요?

답변1

이상한 솔루션

$ awk '/>/ { print $1, $2; next } { print }' aa
>YAL003W EFB1
MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
LDDLQQSIEEDEDHVQSTDIAAMQKL*
  • />/한 줄로 검색>
  • next; awk 파일에서 더 이상 패턴을 읽지 않습니다.

답변2

다음은 몇 가지 해결 방법입니다.

  1. grep. 이 패턴은 >공백이 아닌 2개의 연속된 문자열( [^ ]+ [^ ]+) 또는 임의의 문자( )로 .+시작하는 줄을 검색합니다. 각 줄의 일치하는 부분만 인쇄 하는 이유는 다음과 같습니다 -o.grep

    $ grep -oP '^(>[^ ]+ [^ ]+|.+)' file.fa 
    >YAL003W EFB1
    MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
    EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
    SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
    LDDLQQSIEEDEDHVQSTDIAAMQKL*
    
  2. awk

    $ awk '{if(/>/){print $1,$2}else{print}}' file.fa 
    >YAL003W EFB1
    MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
    EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
    SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
    LDDLQQSIEEDEDHVQSTDIAAMQKL*
    
  3. 암소 비슷한 일종의 영양sed

    $ sed -r 's/(>[^ ]+ [^ ]+).*/\1/' file.fa 
    >YAL003W EFB1
    MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
    EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
    SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
    LDDLQQSIEEDEDHVQSTDIAAMQKL*
    
  4. 어느sed

    $ sed 's/\(>[^ ]* [^ ]*\).*/\1/' file.fa 
    >YAL003W EFB1
    MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
    EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
    SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
    LDDLQQSIEEDEDHVQSTDIAAMQKL*
    
  5. cut

    $ cut -d ' ' -f 1,2 file.fa 
    >YAL003W EFB1
    MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD
    EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK
    SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS
    LDDLQQSIEEDEDHVQSTDIAAMQKL*
    
  6. 진주.

    $ perl -lane 'print "@F[0..1]"' file.fa 
    >YAL003W EFB1
    MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKAD 
    EFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAK 
    SIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVS 
    LDDLQQSIEEDEDHVQSTDIAAMQKL* 
    

    옵션은 다음과 같습니다

    • l: 각 입력 줄에서 후행 줄 바꿈을 제거하고 각 인쇄 호출에 줄 바꿈을 추가합니다.
    • a: 공백의 각 입력 행을 @F배열로 분할합니다.
    • n: 입력 파일을 한 줄씩 읽습니다.
    • e:각 줄에서 이 스크립트를 실행합니다.

    스크립트 자체는 첫 번째와 두 번째 필드만 인쇄합니다. 시퀀스 라인의 경우 첫 번째 필드인 사용 가능한 유일한 필드만 인쇄합니다. 이것이 전체 라인입니다.

관련 정보