计算最长的连续模式

计算最长的连续模式

我有一个序列文件:

$猫文件
CACCGTTGCCAAACAATG
TTAGAAGCCTGTCAGCCT
CATTGCTCTCAGACCCAC
嘎嘎嘎嘎嘎嘎嘎嘎
ACACGGAATCTGCTTTTT
卡加特CCCAAAAGATGG

我想计算 C+T 的最长延伸。我只能计算总 C+T,但我想要最长的伸展。

$猫文件| awk '{ print $0, gsub(/[cCtT]/,"",$1)}'
CACCGTTGCCAAACAATG 9
TTAGAAGCCTGTCAGCCT 10
猫GCTCTCAGACCCAC 12
嘎嘎嘎嘎嘎嘎嘎8
ACACGGAATCTGCTTTTT 11
CAGAATTCCCAAAGATGG 7

预期结果将显示最长的 C+T 拉伸。

CACCGTTGCCAAACAATG 9 2
TTAGAAGCCTGTCAGCCT 10 3
猫猫GCTCTCAGACCCAC 12 5
嘎嘎嘎嘎嘎嘎嘎嘎 8 2
ACACGGAATCTGCTTTTT 11 6
CAGAATTCCCAAAGATGG 7 5

答案1

FWIW 这是在 perl 中使用maxfrom 的方法List::Util

$ perl -MList::Util=max -lpe '$_ .= " " . max 0, map length, /[CT]+/gi' file
CACCGTTGCCAAACAATG 2
TTAGAAGCCTGTCAGCCT 3
CATTGCTCTCAGACCCAC 5
GATGTACGTCACATTAGA 2
ACACGGAATCTGCTTTTT 6
CAGAATTCCCAAAGATGG 5

答案2

$ awk '{ split($0, a, "[^CTct]+"); m=0
         for (i in a) {
             len=length(a[i])
             if (len > m) m=len
         }
         print $0, m  }' file
CACCGTTGCCAAACAATG 2
TTAGAAGCCTGTCAGCCT 3
CATTGCTCTCAGACCCAC 5
GATGTACGTCACATTAGA 2
ACACGGAATCTGCTTTTT 6
CAGAATTCCCAAAGATGG 5

awk程序在运行任何非大写或小写CT.然后,它循环遍历分割结果的比特,找到最长的比特。然后它会打印原始行以及找到的最大长度。

由于 Roman 查看了各种解决方案的时间安排,因此这里有一个更快的解决方案:

awk -F "[^CTct]+" '
    m = 0
    for (i = 1; i <= NF; ++i) {
        len = length($i)
        if (len > m) m = len
    }
    print m' file | paste file -

它更快,因为它只分割线一次。第一个代码还尝试在空格上分割输入行。

使用它进行计时,mawk在 500000 行上显示 0.79 秒。第一个解决方案对相同数据使用 1.69 秒,表明它是大概花费最多时间的分割操作。

答案3

with sed(假设每行不超过 19 个字符),只是为了好玩并使用 RE 匹配的贪婪属性:

sed '
  h;y/cCtT/xxxx/;x;H;s/./x/g;G
  s/^\(x*\).*\n.*\1.*\n/\1 /
  s/^x\{10\}/1/;s/$/:9876543210xxxxxxxxx/
  s/^\(1*\)\(x*\) \(.*\):.*\(.\).\{9\}\2$/\3 \1\4/'

@Kusalananda 解决方案的一个变体:

awk -F '[^cCtT]+' '
  {
    max = 0
    for (i = 1; i <= NF; i++)
      if ((l = length($i)) > max)
        max = l
    print $0, max
  }'

答案4

也试试

awk '
        {T0 = $0
         while (match (T0, /[CTct]+/))  {if (RLENGTH > MX) MX = RLENGTH
                                         T0 = substr (T0, RSTART+RLENGTH)
                                        }
         print $0, MX
        }
' file

时间比其他提案要快一点awk

相关内容