可能であれば、そのためのライナーを探しています。このような順序があります。
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