基本的にシーケンスがあります。
AAAGCATATGCTAGCCCGTATAGCGATACTAGCTATACGATATATATGATCAATGCCCGTATAG
シーケンス内のすべての「ORF」を見つける必要があります。 ORFは、ATGで始まり、TGA、TAA、またはTAGで終わるすべての領域です。
たとえば、上記の順序では、ORFは次のようになります。
AAAGCAT**ATGCTAG**CCCGTATAGCGATACTAGCTATACGATATAT**ATGATCAATGCCCGTATAG**
第2のORFは、ORFの内部にATGがあることが分かる。これは、終了前にTGA、TAA、またはTAGがない場合に発生します。
うん、それは基本的に問題だ。 C ++には2〜3つの方法があることを知っていますが、bashの構文についてはわかりません。
私はライブラリやPerlなどを使用することはできませんし、特別な機能もなく、grep、awk、sed、ループなどを使用することもできます。
ベストアンサー1
あなたはそれを使用することができますgrep
もしPerl互換正規表現(PCRE)オプションgrep
を持つGNUバージョンを使用しています。-P
または作成者のpcregrep
(別名)pgrep
ポリメラーゼ連鎖反応図書館。-P
オプションをサポートせずにアップグレードまたは交換できない以前のバージョンのGNU grepまたは非GNU grepを使用しない限り、これを使用する理由はありません。
たとえば、(シーケンスが名前付きファイルにあるとしますinput.txt
):
$ grep -oP 'ATG.*?TA[AG]' input.txt
ATGCTAG
ATGATCAATGCCCGTATAG
この-o
オプションは、GNU grepに完全な行ではなく一致するテキストのみを出力するように指示し、-P
Perl準拠の正規表現を使用するように指示します。
または以下を使用する場合pcregrep
:
$ pcregrep -o 'ATG.*?TA[AG]' input.txt
ATGCTAG
ATGATCAATGCCCGTATAG
?
正規表現()の非greedy修飾子はキャプチャを保証します.*?
。みんな最長パターンだけでなくパターンも一致させます。正規表現の文脈において、「greedy」は「最大限に一致させようとする」(デフォルト)を意味し、「non-greedy」は「できるだけ少なく一致しようとする」ことを意味する。
これについて良い説明がありますhttps://www.regular-expressions.info/repeat.html。ちなみに、サイトの残りの部分には多くのチュートリアルと例が含まれており、正規表現を学ぶのに最適な場所です。
ほとんどの正規表現ライブラリは欲しくないGNU grep でも採用した Perl 拡張である non-greedy 一致を実装します。そしてそれにリンクされたプログラムポリメラーゼ連鎖反応、間違いなく。
ところで、これが出力の様子ですいいえ貪欲ではない修飾子:
$ grep -oP 'ATG.*TA[AG]' input.txt
ATGCTAGCCCGTATAGCGATACTAGCTATACGATATATATGATCAATGCCCGTATAG