Text-Processing

從序列中心找到最長的圖案延伸

  • October 16, 2018

如何計算序列中任意位置的 C/T 最長連續模式和從中心開始的 C/T 最長連續模式

CCCCTGTTGCCAAACAATGC

TTTTCCCGCCTTTGGCCTAC

TACACGGAACCTCTTTTTTA

期望的輸出是計算序列中任意位置的 C/T 最長連續模式以及從中心開始的 C/T 最長連續模式

CCCCTGTTGCCAAACAATGC 5 2

TTTTCCCGCCTTTGGCCTAC 7 5

TACACGGAACCTCTTTTTTA 10 10

第一行序列中有 5 個連續的 C/T 模式,而距離中心最長的 C/T 模式為 2。

PS。類似問題的解決方案是在這裡 計算最長的連續模式

我假設您的意思是“從中心”是“包含字元串中間字元的序列。我在測試數據中添加了一行,使得字元串的中間字元既不是 C 也不是 T:

$ cat file
CCCCTGTTGCCAAACAATGC
TTTTCCCGCCTTTGGCCTAC
TACACGGAACCTCTTTTTTA
CATAAAAAAAAAAAAACTCT

該解決方案依賴於 awk 的 RSTART 和 RLENGTH 變數,這些變數設置為匹配模式的 match() 函式的副產品,以及一些算法來跟踪我們在字元串中的位置:

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

引用自:https://unix.stackexchange.com/questions/475521