シーケンスの中心で最も長いパターン拡張を探します。

シーケンスの中心で最も長いパターン拡張を探します。

シーケンスの任意の位置で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

おすすめ記事