我有这个文件,其中有许多序列,最多 500 个序列,其中一些序列具有相同的名称,我想将复制合并到一个中
file 1
>1
aa
>2
cc
>3
tt
>4
atc
>2
tag
>1
gg
outfile
>1
aagg
>2
cctag
>3
tt
>4
atc
答案1
这是一个 Awk 脚本:
#!/usr/bin/awk -f
/^>/ { header = $0 }
!/^>/ { sequence[header] = sequence[header] $0 }
END {
for (head in sequence) {
printf("%s\n%s\n", head, sequence[head])
}
}
它将完整的 Fasta 文件解析到内存中,连接具有相同标头的所有序列数据。最后,它会输出数据。
请注意,这种方法是不好对于大型 Fasta 文件,并且肯定会在基因组大小的文件上完全崩溃(内存不足)。在这些情况下,为了找到更好的方法,可以考虑将解析的数据存储到最后连接的文件中。不过我还没有考虑过实现这一点。
运行脚本:
$ awk -f ./script.awk file.fa
>1
aagg
>2
cctag
>3
tt
>4
atc