Text-Processing
從序列中心找到最長的圖案延伸
如何計算序列中任意位置的 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