快速计算fasta序列长度的方法

最近看了一下进入PLoB的网页来路分析,看到有同学搜索计算fasta序列长度。其实自己在之前的数据分析中也遇到过相关的问题,这里给大家分享两种我常用的方法。

方法一:linux下用awk计算fasta序列的长度

前面发表一篇文章《用awk和sed快速将fasta格式的序列改成一行显示》,其实我的这种方法就是在这基础上进行的。加入已经有一个fasta文件为contig.fa,文件中的序列如下:

  1. >1 cvg_0.0_tip_0
  2. ATTTTGGCTTTGGAAGGGC
  3. >3 cvg_0.0_tip_0
  4. GAATAGTGATACAAATTATATAGTTTCAAGTATGTGACTTGAACATGAGATTAT
  5. >5 cvg_0.0_tip_0
  6. TAATCTAGGCTTGAAACTATATAATTTGTATCACTATTCTAAGGATTTTTTT
  7. >7 cvg_0.0_tip_0
  8. TATTCATCTTTGCACTACGTTCATCTCAA
  9. >9 cvg_0.0_tip_0
  10. TCCGTTGTGGGGTCCACCAATGATTAAAACGAATATTCCC
  11. >11 cvg_0.0_tip_0
  12. GGAATATTCGTTTTAACAGGGAATATTCGTAGATGGCACAA
  13. >13 cvg_0.0_tip_0
  14. AGAAATAAATAAATTAAATAAAGTGATGTTTCTAATTTATTAAGGAAATTAA
  15. >15 cvg_0.0_tip_0
  16. GAAAGGACCAGACATCAATTATTATTGAAATAAATGTCAATTTT
  17. >17 cvg_0.0_tip_0
  18. GTTAATTACCCGATTGGTCAATATAACCTCCAGACATCAATTATTATTG
  19. >19 cvg_0.0_tip_0
  20. GATTATTTTTTATAACCTCCAGACA

首先通过上面的命令将fasta序列转换成一行显示,命令如下:

  1. awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }' contig.fa

得到如下结果:

快速计算fasta序列长度的方法

如果想直接显示每条序列的长度,可以运行如下命令:

  1. awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }' contig.fa |awk '{print $1"\t"length($3)}'

得到结果如下:

  1. >1 19
  2. >3 54
  3. >5 52
  4. >7 29
  5. >9 40
  6. >11 41
  7. >13 52
  8. >15 44
  9. >17 49
  10. >19 25

方法二:利用bioperl计算fasta序列长度

上面的方法是基于linux计算的,直接输出结果。但是有是有计算fasta序列的长度只是程序某一个小的操作步骤,那我们可以采用下面的方法.

首先,确定bioperl正确安装了。

然后再perl中利用如下的代码:

  1. use Bio::SeqIO;
  2. my $file;
  3. my $seq;
  4. my %hash
  5. my $in=Bio::SeqIO->new(-file=>"$file",-format=>"fasta");
  6. while ($seq=$in->next_seq())
  7. {
  8. $hash{$seq->id}=length($seq->seq()); # length($seq->seq()) 计算的是序列长度,序列的长度被存入hash表中
  9. print $seq->id."\t".$seq->seq()."\n";# 直接输入,输出的结果与上面awk的方法是一致的
  10. }

这样每一条序列的长度就被存入以其序列名字为key的hash表中

评论  2  访客  1  作者  1
    • mao44 0

      似乎直接用Bioperl提取序列会比较快呢

      尤其是批量提取长序列,awk总觉得有点慢

        • ybzhao

          @ mao44 awk是linux自己带的命令应该是用C或者C++写的。我觉得要快一些,最主要的是方便。当然尽量少用管道符。多次套用的话,肯定会有点慢。

      发表评论

      匿名网友

      拖动滑块以完成验证
      加载失败