【问题标题】:How can i eliminate duplicated sequences in fasta file如何消除fasta文件中的重复序列
【发布时间】:2020-04-22 20:30:02
【问题描述】:

我正在尝试使用所有已发布的序列来构建数据库细菌类型,以使用 bowtie2 进行映射来计算我对该数据库的读取的覆盖率,为此,我将我从 ncbi 下载的所有基因组序列合并到一个 fasta_library(我在fasta文件中合并74个文件),问题是在这个fasta文件(我创建的库)中我有很多重复的序列,这在很大程度上影响了覆盖率,所以我问有没有办法为了消除我在 Library_File 中的重复,或者是否有任何方法可以在没有重复的情况下合并序列,或者是否有任何其他方法可以计算我的读取对参考序列的覆盖率

我希望我已经足够清楚了,如果有什么不清楚的地方请告诉我。

【问题讨论】:

    标签: bioinformatics biopython biological-neural-network


    【解决方案1】:

    如果您可以控制您的设置,那么您可以安装 seqkit 并在您的 FASTA 文件上运行以下命令:

    $ seqkit rmdup -s < in.fa > out.fa
    

    如果您有多个文件,您可以将它们连接起来并作为标准输入输入:

    $ seqkit rmdup -s < <(cat inA.fa ... inN.fa) > out.fa
    

    rmdup 选项删除重复项,-s 选项根据顺序调用重复项,忽略标头的差异。我不确定输出中保留了哪个标头,但这可能需要考虑。

    为避免第三方依赖并了解如何删除重复数据,可以使用awk。

    想法是将所有 FASTA 记录一一读入关联数组(或哈希表,在 Python 中也称为“字典”),前提是该序列尚未在数组中.

    例如,以单行 FASTA 文件 in.fa 开头,如下所示:

    >test1
    ATAT
    >test2
    CGCG
    >test3
    ATAT
    >test4
    GCCT
    

    我们可以删除重复项,保留第一个标题,如下所示:

    $ awk 'BEGIN {i = 1;} { if ($1 ~ /^>/) { tmp = h[i]; h[i] = $1; } else if (!a[$1]) { s[i] = $1; a[$1] = "1"; i++; } else { h[i] = tmp; } } END { for (j = 1; j < i; j++) { print h[j]; print s[j]; } }' < in.fa > out.fa
    $ cat out.fa
    >test1
    ATAT
    >test2
    CGCG
    >test4
    GCCT
    

    如果您需要修改,它需要对awk 有一点了解。这种方法还取决于您的 FASTA 文件的结构(在一行或多行上具有序列的记录等),尽管通常很容易将 FASTA 文件修改为上述结构(标题和序列各一行)。

    任何哈希表方法也使用相当多的内存(我想seqkit 可能会为这个特定任务做出同样的妥协,但我还没有查看源代码)。对于非常大的 FASTA 文件,这可能是一个问题。

    如果您有可以安装软件的本地环境,最好使用seqkit。如果您有一个 IT 锁定设置,那么 awk 也可以完成这项任务,因为它随大多数 Unix 开箱即用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多