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
あなたが示した簡単なケースは、マイナーなものです。シーケンスは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