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