を使用してファイルから一部のデータを抽出しようとしていますgrep
。
このファイルはDNA fastaファイルで、次の行が含まれています。
ATCGTAGCTAGCATCGTATCGATGCTGCTATGCTAGATGCTAGT
TA
前の20文字をすべて検索する必要があります。TA
私は現在、以下を試しています。grep -E -o ".{0,20}TA"
TA
ただし、これは上の行に指定された文字列間の文字を提供する出力を生成します。たとえば、次のようになります。
TCGATGCTGCTA
GCATCGTA
TA
これは私が得たい2つの項目の間の文字列です。
TAGCATCGTATCGATGCTGCTA
TCGTATCGATGCTGCTATGCTA
検索文字列のインスタンスを含みます。
これを行う方法はありますかgrep
?
ベストアンサー1
文字列が重複したいので、デフォルトでこれを提供できるツールはありません。重複するすべてのイベントを見つけるには、入力を繰り返す必要があります。次の問題は正規表現の貪欲な特性です。 aが見つかるATCGTA
とATCGTAGCTA
先頭が見つかりません。これはループをより複雑にします。
sed -E ':1
h;s/(.*TA).*/\1/
s/.{0,20}TA$/_&/
s/.*_//p
g;s/(.*)TA.*/\1/;t1
d
私が考えることができる最初の解決策です。この例の出力には、必要なすべてのシーケンスを含める必要があります。
GATGCTGCTATGCTAGATGCTA
TCGTATCGATGCTGCTATGCTA
TAGCATCGTATCGATGCTGCTA
ATCGTAGCTAGCATCGTA
ATCGTAGCTA
ATCGTA
説明:最後のゲームから始めるのは簡単です。
h
次のサイクルのためにバッファをアーカイブスペースに保存するs/(.*TA).*/\1/
最後のもの以降のすべてを削除します。TA
s/.{0,20}TA$/_&/
取得するシーケンスの先頭に下線をマーカーとして配置します。s/.*_//p
マーカーの前のすべての項目を削除し、シーケンスを印刷します。- 次のサイクルを準備するには、保存
g
したパターンを復元し、s/(.*)TA.*/\1/
最後のTA
パターンとそれ以降のパターンを削除してもう一度見つからないようにします。 - 最後に、シーケンスが見つかったら
t1
始めます。:1
d
最後の偽の出力を抑制します。