일치하는 fasta 파일 가져오기

일치하는 fasta 파일 가져오기

list.txt:

58759__len__2903
58759__len__2903
673957__len__1655
673957__len__1655
3566454__len__1744

seq.fasta:

>58759__len__2903
TTTTCCGTAGAGGAGATCCCTATTTTTAGGTTTGTAAGAGATCATTTT
>67777__len__2978
TTTTTAGGTTTGTAAGACCGTAGAG
>673957__len__1655
CCCTATTTTTAGGTTTGTAAGGTTTGTAAGACCGTAGAG
>3566454__len__1744
GGTTTGTAAGACCGTAGAGGGTTTGTAAGACCGTAGAG

output.fasta:

>58759__len__2903
TTTTCCGTAGAGGAGATCCCTATTTTTAGGTTTGTAAGAGATCATTTT
>673957__len__1655
CCCTATTTTTAGGTTTGTAAGGTTTGTAAGACCGTAGAG
>3566454__len__1744
GGTTTGTAAGACCGTAGAGGGTTTGTAAGACCGTAGAG

행을 일치시키고 list.txt(중복이 있는 경우 고유한 행만 사용) seq.fasta출력 파일에 표시된 대로 FASTA 파일을 추출합니다.

답변1

당신이 보여준 간단한 사례는 사소한 것입니다. 시퀀스는 한 행을 초과하지 않으므로 간단히 사용하여 grep각 ID와 그 뒤의 행을 검색할 수 있습니다.

grep -Fwf list.txt -A 1  seq.fasta | grep -v '^--$'  > out.fasta

이 옵션을 사용하면 출력 행 그룹 사이에 추가된 행만 필터링됩니다 grep -v '^--$'.--grep-A

부정 행위를 방지하려면 (GNU) 정렬을 통해 목록을 전달할 수 있습니다.

grep -Fwf <(sort -u list.txt) -A 1  seq.fasta | grep -v '^--$'  > out.fasta

사용되는 플래그는 다음과 같습니다.

   -f FILE, --file=FILE
          Obtain  patterns  from  FILE,  one  per  line.   The  empty file
          contains zero patterns, and therefore matches nothing.   (-f  is
          specified by POSIX.)
   -w, --word-regexp
          Select  only  those  lines  containing  matches  that form whole
          words.  The test is that the matching substring must  either  be
          at  the  beginning  of  the  line,  or  preceded  by  a non-word
          constituent character.  Similarly, it must be either at the  end
          of  the  line  or  followed by a non-word constituent character.
          Word-constituent  characters  are  letters,  digits,   and   the
          underscore.
   -F, --fixed-strings
          Interpret PATTERN as a  list  of  fixed  strings,  separated  by
          newlines,  any  of  which is to be matched.  (-F is specified by
          POSIX.)
   -A NUM, --after-context=NUM
          Print NUM  lines  of  trailing  context  after  matching  lines.
          Places   a  line  containing  a  group  separator  (--)  between
          contiguous groups of matches.  With the  -o  or  --only-matching
          option, this has no effect and a warning is given.

그러나 대부분의 경우 시퀀스는 여러 줄로 구성되므로 충분하지 않습니다. 이런 종류의 작업을 많이 수행하는 경우 이 exonerate도구 모음을 설치하는 것이 좋습니다. 일반적으로 생물정보학 작업에 매우 유용하며 다음과 같은 훌륭한 도구가 포함되어 있습니다 fastafetch.

  1. Guilty Free 키트를 설치합니다. 이는 Debian 기반 시스템의 저장소에 있으며 다음에서 얻을 수도 있습니다.여기.

     sudo apt-get install exonerate
    
  2. fasta 파일에 대한 색인을 만듭니다. 이는 시퀀스를 빠르게 검색하는 데 사용됩니다.

     fastaindex seq.fasta seq.idx 
    
  3. 시퀀스를 추출합니다.

     $ fastafetch -f seq.fasta -i seq.idx -Fq <(sort -u list.txt )
     >3566454__len__1744
     GGTTTGTAAGACCGTAGAGGGTTTGTAAGACCGTAGAG
     >58759__len__2903
     TTTTCCGTAGAGGAGATCCCTATTTTTAGGTTTGTAAGAGATCATTTT
     >673957__len__1655
     CCCTATTTTTAGGTTTGTAAGGTTTGTAAGACCGTAGAG
    

관련 정보