我怎样才能消除fasta文件中的重复序列
How can i eliminate duplicated sequences in fasta file
我正在尝试使用已发布的所有序列来构建数据库细菌类型,以使用 bowtie2 进行映射来计算我对该数据库的读取覆盖率,为此,我将从 ncbi 下载的所有基因组序列合并为一个 fasta_library(我在 fasta 文件中合并了 74 个文件),问题是在这个 fasta 文件(我创建的库)中我有很多重复的序列,这在很大程度上影响了覆盖范围,所以我'我问是否有任何方法可以消除我的 Library_File 中的重复,或者是否有任何方法可以在没有重复的情况下合并序列,或者是否有任何其他方法可以计算我的读取对参考序列的覆盖率
希望我说得够清楚了,有什么不清楚的地方请告诉我。
如果您可以控制您的设置,那么您可以在您的 FASTA 文件中安装 seqkit 和 运行 以下内容:
$ seqkit rmdup -s < in.fa > out.fa
如果您有多个文件,您可以将它们连接起来并作为标准输入输入:
$ seqkit rmdup -s < <(cat inA.fa ... inN.fa) > out.fa
rmdup
选项删除重复项,-s
选项根据顺序调用重复项,忽略header中的差异。我不确定输出中保留了哪个 header,但这可能是需要考虑的问题。
要避免 third-party 依赖关系并了解如何删除重复项,可以使用 awk
.
思路是将所有FASTA记录一条一条读入一个关联数组(或散列table,也称为"dictionary"中的一个Python),仅当序列不在数组中时。
例如,从 single-line FASTA 文件开始 in.fa
如下所示:
>test1
ATAT
>test2
CGCG
>test3
ATAT
>test4
GCCT
我们可以删除重复项,保留第一个 header,像这样:
$ awk 'BEGIN {i = 1;} { if ( ~ /^>/) { tmp = h[i]; h[i] = ; } else if (!a[]) { s[i] = ; a[] = "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 文件修改为上述结构(每行一行 header和顺序)。
任何哈希 table 方法也使用相当多的内存(我想 seqkit
可能对这个特定任务做出相同的妥协,但我没有查看源代码)。对于非常大的 FASTA 文件,这可能是个问题。
如果您有可以安装软件的本地环境,使用 seqkit
可能更好。如果你有一个 IT-locked-down 设置,那么 awk
也可以完成这个任务,因为它与大多数 Unix 一起开箱即用。
我正在尝试使用已发布的所有序列来构建数据库细菌类型,以使用 bowtie2 进行映射来计算我对该数据库的读取覆盖率,为此,我将从 ncbi 下载的所有基因组序列合并为一个 fasta_library(我在 fasta 文件中合并了 74 个文件),问题是在这个 fasta 文件(我创建的库)中我有很多重复的序列,这在很大程度上影响了覆盖范围,所以我'我问是否有任何方法可以消除我的 Library_File 中的重复,或者是否有任何方法可以在没有重复的情况下合并序列,或者是否有任何其他方法可以计算我的读取对参考序列的覆盖率
希望我说得够清楚了,有什么不清楚的地方请告诉我。
如果您可以控制您的设置,那么您可以在您的 FASTA 文件中安装 seqkit 和 运行 以下内容:
$ seqkit rmdup -s < in.fa > out.fa
如果您有多个文件,您可以将它们连接起来并作为标准输入输入:
$ seqkit rmdup -s < <(cat inA.fa ... inN.fa) > out.fa
rmdup
选项删除重复项,-s
选项根据顺序调用重复项,忽略header中的差异。我不确定输出中保留了哪个 header,但这可能是需要考虑的问题。
要避免 third-party 依赖关系并了解如何删除重复项,可以使用 awk
.
思路是将所有FASTA记录一条一条读入一个关联数组(或散列table,也称为"dictionary"中的一个Python),仅当序列不在数组中时。
例如,从 single-line FASTA 文件开始 in.fa
如下所示:
>test1
ATAT
>test2
CGCG
>test3
ATAT
>test4
GCCT
我们可以删除重复项,保留第一个 header,像这样:
$ awk 'BEGIN {i = 1;} { if ( ~ /^>/) { tmp = h[i]; h[i] = ; } else if (!a[]) { s[i] = ; a[] = "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 文件修改为上述结构(每行一行 header和顺序)。
任何哈希 table 方法也使用相当多的内存(我想 seqkit
可能对这个特定任务做出相同的妥协,但我没有查看源代码)。对于非常大的 FASTA 文件,这可能是个问题。
如果您有可以安装软件的本地环境,使用 seqkit
可能更好。如果你有一个 IT-locked-down 设置,那么 awk
也可以完成这个任务,因为它与大多数 Unix 一起开箱即用。