如何计算序列中任意位置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。类似问题的解决方案在这里 Count the longest stretch of consecutive patterns
我假设你的意思是“从中心”是“包括字符串中间字符的序列。我在测试数据中添加了一行,这样字符串的中间字符既不是 C 也不是 T:
该解决方案依赖于 awk 的 RSTART 和 RLENGTH 变量,它们被设置为匹配模式的 match() 函数的副产品,以及一些算法来跟踪我们在字符串中的位置:
输出
如果“从中心”意味着“距离中心最近但不一定穿过中心的最长字符串”,您可以尝试
它遍历从正则表达式到正则表达式匹配的行,保留一个指针来保持原始行中的位置。以此计算字符串末尾到中心或字符串中心到开头的字符距离,并将最小距离的字符串长度赋值给结果变量。对于相等的距离,它保留最长的长度。
对于穿过中心的形态,结果等同于之前给出的样本。