シーケンスの任意の位置でC / Tの最長連続パターンと中央でC / Tの最長連続パターンを計算する方法
CCCCTGTTGCCAAACAATGC
TTTTCCCGCCTTGGCCTAC
TACACGGAACCTCTTTTTTTA
目的の出力は、シーケンスのどこでもC / Tの最長連続パターンと中央で始まるC / Tの最長連続パターンを計算することです。
CCCCTGTTGCCAAACAATGC5 2
TTTTCCCGCCTTGGCCTAC7 5
TACACGGAACCTCTTTTTTTA10 10
最初の行には、5つの連続したC / Tパターンが順番にあり、中央で最も長いC / Tパターンは2つです。
PS。同様の問題に対する解決策はここにあります。 最長連続パターンの計算
ベストアンサー1
「中央で」という語は、「文字列の中間文字を含むシーケンス」を意味すると仮定する。文字列の中間文字がCでもTでもないように、テストデータに1行を追加しました。
$ cat file
CCCCTGTTGCCAAACAATGC
TTTTCCCGCCTTTGGCCTAC
TACACGGAACCTCTTTTTTA
CATAAAAAAAAAAAAACTCT
解決策は、パターンに一致するmatch()関数の副産物として設定されるawkのRSTART変数とRLENGTH変数と、文字列内の現在の位置を追跡するいくつかのアルゴリズムに依存します。
awk '{
line = $0
max = max_ctr = 0
mid = int(length($0)/2)
idx = 1
while (match( substr(line,idx), /[CT]+/ )) {
if (RLENGTH > max) max = RLENGTH
if (idx <= mid && mid <= idx+RLENGTH) max_ctr = RLENGTH
idx += RSTART + RLENGTH - 1
}
print $0, max, max_ctr
}' file
出力
CCCCTGTTGCCAAACAATGC 5 2
TTTTCCCGCCTTTGGCCTAC 7 5
TACACGGAACCTCTTTTTTA 10 10
CATAAAAAAAAAAAAACTCT 4 0