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
.
Guilty Free 키트를 설치합니다. 이는 Debian 기반 시스템의 저장소에 있으며 다음에서 얻을 수도 있습니다.여기.
sudo apt-get install exonerate
fasta 파일에 대한 색인을 만듭니다. 이는 시퀀스를 빠르게 검색하는 데 사용됩니다.
fastaindex seq.fasta seq.idx
시퀀스를 추출합니다.
$ fastafetch -f seq.fasta -i seq.idx -Fq <(sort -u list.txt ) >3566454__len__1744 GGTTTGTAAGACCGTAGAGGGTTTGTAAGACCGTAGAG >58759__len__2903 TTTTCCGTAGAGGAGATCCCTATTTTTAGGTTTGTAAGAGATCATTTT >673957__len__1655 CCCTATTTTTAGGTTTGTAAGGTTTGTAAGACCGTAGAG