ファイルから最初のn文字を抽出するgrepメソッド

ファイルから最初のn文字を抽出するgrepメソッド

を使用してファイルから一部のデータを抽出しようとしていますgrep

このファイルはDNA fastaファイルで、次の行が含まれています。

ATCGTAGCTAGCATCGTATCGATGCTGCTATGCTAGATGCTAGT

TA前の20文字をすべて検索する必要があります。TA

私は現在、以下を試しています。grep -E -o ".{0,20}TA"

TAただし、これは上の行に指定された文字列間の文字を提供する出力を生成します。たとえば、次のようになります。

TCGATGCTGCTA 
GCATCGTA 

TAこれは私が得たい2つの項目の間の文字列です。

TAGCATCGTATCGATGCTGCTA
TCGTATCGATGCTGCTATGCTA

検索文字列のインスタンスを含みます。

これを行う方法はありますかgrep

ベストアンサー1

文字列が重複したいので、デフォルトでこれを提供できるツールはありません。重複するすべてのイベントを見つけるには、入力を繰り返す必要があります。次の問題は正規表現の貪欲な特性です。 aが見つかるATCGTAATCGTAGCTA先頭が見つかりません。これはループをより複雑にします。

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最後の偽の出力を抑制します。

おすすめ記事