如果您可以控制您的设置,那么您可以安装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 开箱即用。