首页 > 解决方案 > 在 dna 字符串中查找唯一序列

问题描述

我有一个包含一堆序列的文件。字符串的前缀为 AAGCTT,后缀为 GCGGCCGC。

这两种模式之间存在独特的序列。我想找到这些序列并计算它们的出现。

下面的例子

AAGCTT CTGCCCACACACCGAAACATGAATCGATCACATACTAGAATCAGGCAGTCAGAGATATCAAAGATGATGAGTTCG GCGGCCGC

字符串 CTGCCCACACACCGAAACATGAATCGATCACATACTAGAATCAGGCAGTCAGAGATATCAAAGATGATGAGTTCG 存在 1000 次。

标签: linuxbash

解决方案


假设您有一些文件dna.txt,您可以简单地:

  1. 将您的原始连续 DNA 字符串分成多行,使用您PREFIX作为行分隔符,然后简单地删除所有后缀和它们后面的所有不相关 DNA
  2. 然后用于sort -u遍历新文件中的所有行,不重复(所有唯一模式)。
  3. 然后只需使用grep -oandwc -l来计算出现次数!
PREFIX='AAGCTT'
SUFFIX='GCGGCCGC'
find_traits() {
        # Step 1
        sed "s/${PREFIX}/\n/g" dna.txt > /tmp/dna_lines.txt
        sed -i "s/${SUFFIX}.*//" /tmp/dna_lines.txt

        # Step 2
        for pattern in $(sort -u /tmp/dna_lines.txt)
        do
                # Step 3
                printf "
PATTERN [$(grep -o $pattern dna.txt | wc -l)] : |${PREFIX}|${pattern}|${SUFFIX}|

"
        done
}

推荐阅读