私は最近bashを使い始めましたが、通常は手動で実行する必要があるいくつかのタスクを自動化するためにいくつかのスクリプトを書くことを望む分子生物学者です。
以下のように2つのファイル(rev.fasta
および)があります。index_rev.fasta
$ head rev.fasta
>1
bc-1
>2
bc-1
>3
bc-1
>4
bc-1
>5
bc-1
$ head necessary_files/index_rev.fasta
>rev-bc-1
TGTGTTGAGACCACACAGGCCTCAGTCTCGTGGGCTCGG
>rev-bc-2
GTCTGTCGCCATGGAAAGTCAACTGTCTCGTGGGCTCGG
>rev-bc-3
TTGCTACGGTTGACCATGCAGTTAGTCTCGTGGGCTCGG
>rev-bc-4
AACTTGAGGTATCGTATATTCAATGTCTCGTGGGCTCGG
>rev-bc-5
GCAGGTGGGCATCCGGACCGATATGTCTCGTGGGCTCGG
bashコマンドを書きたい
rev.fasta
類似またはsed 's/>rev-//g' necessary_files/index_rev.fasta
類似の一致grep
- (たとえば)
bc-.*$
で見つかった一致を(たとえば)ファイルの次の行に置き換えます。rev.fasta
bc-1
necessary_files/index_rev.fasta
TGTGTTGAGACCACACAGGCCTCAGTCTCGTGGGCTCGG
bc-1
結果は次のとおりです。
>1
TGTGTTGAGACCACACAGGCCTCAGTCTCGTGGGCTCGG
>2
TGTGTTGAGACCACACAGGCCTCAGTCTCGTGGGCTCGG
>3
TGTGTTGAGACCACACAGGCCTCAGTCTCGTGGGCTCGG
メモ:
重要な情報のいくつか:始めbc-
から1
16
どうすればいいのかわかりません。私はいくつか試してみましたが、これは私ができることよりも複雑です。どんなアイデアがありますか?
答え1
私の質問の理解は、インデックスファイルに基づいてfatsaファイルを検索したいということです。以下の回答では、インデックスファイルはPatterns.txtです。また、プロセスをテストしてデモンストレーションするためにファイルをいくつか変更しました。この回答を読んだ後は、独自のPattern.txtファイルを使用できます。
したがって、仮定は次のようになります。
$ cat fasta
>rev-bc-1
TGTGTTGAGACCACACAGGCCTCAGTCTCGTGGGCTCGG
>rev-bc-2
GTCTGTCGCCATGGAAAGTCAACTGTCTCGTGGGCTCGG
>rev-bc-3
TTGCTACGGTTGACCATGCAGTTAGTCTCGTGGGCTCGG
>rev-bc-4
AACTTGAGGTATCGTATATTCAATGTCTCGTGGGCTCGG
>rev-bc-5
GCAGGTGGGCATCCGGACCGATATGTCTCGTGGGCTCGG
$ cat patterns.txt
>1
bc-4
>2
bc-2
まず、このコマンドを実行して、fastaファイルからPattern.txtに必要なコンテンツを抽出します。
$ awk '/bc/{print}' patterns.txt | xargs -I{} awk -v q=$(echo {}) '($0 ~ q){getline; print}' fasta
AACTTGAGGTATCGTATATTCAATGTCTCGTGGGCTCGG
GTCTGTCGCCATGGAAAGTCAACTGTCTCGTGGGCTCGG
この出力を一時ファイルに保存します。
次に、2番目のコマンドを実行して最終結果を取得します。
awk '!/bc/{print}' patterns.txt | paste -d '\n' - fasout
>1
AACTTGAGGTATCGTATATTCAATGTCTCGTGGGCTCGG
>2
GTCTGTCGCCATGGAAAGTCAACTGTCTCGTGGGCTCGG
説明:最初のコマンドは、Pattern.txtからbc-1、bc-2などを含む行を抽出します。次に、その行を見つけるために2番目のawk(一度に1つずつ)にパイプされ、一度見つかったら、awkのgetlineオプションを使用して次の行を印刷します。
2番目のコマンドは、単にPattern.txtファイルをfastoutとマージして、bc-1、bc-2などの行をfasoutの内容で置き換えることを可能にします。
これが実際に望む解決策であるかどうかわからないので、言及していないいくつかの注意事項があります。その場合は、後で回答を修正して含めます。