首页 > 技术文章 > FASTA文件分割

huangyinger 2019-02-22 15:29 原文

FASTA格式是一种用于记录序列的文本格式,在生信分析中经常会用到.fasta文件中往往储存成千上万条序列,而在某些时候,需要对文件进行分割,如分割成每个序列一个文件,或分割成较小的fasta文件
假如有如下数据:
Tricas1.fasta
$ head Tricas1.fasta

CM000276.2
tgatttttaggttagaaattgttttttaaacacgtgttcgcgccattttttttatttatt
tgccaattaagtgcacgtgtccgcgccatttaaaattttgttaccgatttagtgcgattt
tttaggttggcattactttttaaacacgtaactgcgccatttttttaatttagttacctg
tttagcgtgatttttaggttagaaattgttttttaaacacgtgttcgcgccatttttttt
atttatttgccaattaagtgcacgtgtccgcgccatttaaaattttgttaccgatttagt
gcgattttttaggttggcattactttttaaacacgtaactgcgccatttttttaatttag
ttacctgtttagcgtgatttttaggttagaaattgttttttaaacacgtgttcgcgccat
tttttttttatttatttaccgaataagtgcacgtgtccgctccatttaaaattttattag
cgatttagtgcgattttttaggttggcattactttttaaacacgtaactgcgccattttt

这里介绍几种方法对fasta文件进行分割。
方法一:awk
这个方法将文件分割为每条序列一个文件

awk '/^>/{s=++num}{print > "Tricas1_"s".fa"}' Tricas1.fasta

awk 依次对文件的每一行进行处理,当遇到 > 开头的行时,执行 ++num(即 num = num + 1),并将结果赋值给 s,然后将结果重定向给 example_s.fa(其中,在第一条序列时,s 为 1);当处理的行为序列时,语句 /^>/{s=++num} 不执行,直接执行 {print > "example_"s".fa"}(和 {print $0 > "example_"s".fa"} 一样)。

基于以上原理,实现了 fasta 文件的分割。
方法二:perl
该程序可以通过参数 --n-parts num 设定需要将文件设定为 num份,如下面的示例将文件分为两份(使得序列数目尽量相同);当将num 设置成序列的总数时,其效果与方法一

$ perl fasta-splitter.pl --n-parts 2 Tricas1.fasta
程序下载地址:http://kirill-kryukov.com/study/tools/fasta-splitter/files/fasta-splitter-0.2.6.zip

解压即可使用:unzip fasta-splitter-0.2.6.zip

推荐阅读