シーケンススキャンとサブシーケンス出力

シーケンススキャンとサブシーケンス出力

可能であれば、そのためのライナーを探しています。このような順序があります。

CCGGTCTCTTCCGGTTCTGTCTTTTCGCTGG

シーケンスをベースごとにスキャンして20bpを抽出する出力を得たいと思います。したがって、出力は次のようになります

CCGGTCTCTTCCGGTTCTGT
CGGTCTCTTCCGGTTCTGTC
GGTCTCTTCCGGTTCTGTCT

など..長さは常に20bpでなければなりません。

Perlコードを書いたところ、うまくいきます。ライナーを探していますが、awkやsedを使用するのに役立つ人がいますか?

while(<>){
    chomp;
    for my $i(0..length($_)){
        my $str = substr($_,$i,20);
        next if(length($str) < 20);
        print $str,"\n";
    }

}

教えてください

ベストアンサー1

私が正しく理解したと仮定すると、awkこれは次のようになります。

awk -v s=CCGGTCTCTTCCGGTTCTGTCTTTTCGCTGG '
  BEGIN{while (length(x=substr(s, ++i, 20)) == 20) {print x} exit}'
CCGGTCTCTTCCGGTTCTGT
CGGTCTCTTCCGGTTCTGTC
GGTCTCTTCCGGTTCTGTCT
GTCTCTTCCGGTTCTGTCTT
TCTCTTCCGGTTCTGTCTTT
CTCTTCCGGTTCTGTCTTTT
TCTTCCGGTTCTGTCTTTTC
CTTCCGGTTCTGTCTTTTCG
TTCCGGTTCTGTCTTTTCGC
TCCGGTTCTGTCTTTTCGCT
CCGGTTCTGTCTTTTCGCTG
CGGTTCTGTCTTTTCGCTGG

おすすめ記事