加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

计算序列长度(sequence length)的两种方法

(2016-11-16 22:42:18)
标签:

bioinfo

分类: Bioinformatics

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

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

01 >1 cvg_0.0_tip_0
02 ATTTTGGCTTTGGAAGGGC
03 >3 cvg_0.0_tip_0
04 GAATAGTGATACAAATTATATAGTTTCAAGTATGTGACTTGAACATGAGATTAT
05 >5 cvg_0.0_tip_0
06 TAATCTAGGCTTGAAACTATATAATTTGTATCACTATTCTAAGGATTTTTTT
07 >7 cvg_0.0_tip_0
08 TATTCATCTTTGCACTACGTTCATCTCAA
09 >9 cvg_0.0_tip_0
10 TCCGTTGTGGGGTCCACCAATGATTAAAACGAATATTCCC
11

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

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

得到如下结果:

http://upload.plob.ybzhao.com/wp-content/uploads/2012/10/f1-600x115.jpg

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

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

得到结果如下:

01 >1      19
02 >3      54
03 >5      52
04 >7      29
05 >9      40
06 >11     41

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

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

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

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

01 use Bio::SeqIO;
02 my $file;
03 my $seq;
04 my %hash
05 my $in=Bio::SeqIO->new(-file=>"$file",-format=>"fasta");
06 while ($seq=$in->next_seq()) 
07 {
08    $hash{$seq->id}=length($seq->seq()); # length($seq->seq()) 计算的是序列长度,序列的长度被存入hash表中
09    print $seq->id."\t".$seq->seq()."\n";# 直接输入,输出的结果与上面awk的方法是一致的
10 }

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有