2

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

我希望我足够清楚,如果有任何不清楚的地方,请告诉我。

4

1 回答 1

9

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

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

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

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

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

为了避免第三方依赖并了解如何删除 dup,可以使用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 开箱即用。

于 2020-04-22T20:45:35.100 回答