fasta统计——无事闲写

多发点无事之作得了:

#!/usr/bin/env perl
use warnings;
use strict;

die "Usage: perl $0 <fasta>\n" if(@ARGV ne 1);

open FA, $ARGV[0] or die $!;
$/ = "\n>";
my ($sl, $sg, $sc, %hash);
while(<FA>)
{
	chomp;
	s/^>//;
	my @fa = split /\n/;
	my ($id) = $fa[0] =~ /^(\S+)/;
	my ($length, $g, $c);
	if(defined $fa[1])
	{
		for(my $i = 1; $i < @fa; $i ++)
		{
			$length += length($fa[$i]);
			my $gtmp = $fa[$i] =~ tr/Gg/Gg/;
			my $ctmp = $fa[$i] =~ tr/Cc/Cc/;
			$g += $gtmp;
			$c += $ctmp;
		}
	}else{
		warn "no sequences in $id\n";
	}
	$hash{$id} = $length;
	$sl += $length;
	$sg += $g;
	$sc += $c;
}

my $ratio = sprintf("%.4f", ($sg + $sc) / $sl);
print "total_size: $sl\ttotal_G: $sg\ttotal_C: $sc\tGC_ratio: $ratio\n";
my @fasta = sort {$hash{$b} <=> $hash{$a}} keys %hash;
my $num = @fasta;
my $al = sprintf("%d", $sl / $num);
print "total_number: $num\tmax_length: $hash{$fasta[0]}\tmin_length: $hash{$fasta[-1]}\taverage_length: $al\n";
my $n50 = int($num * 0.5) - 1;
my $n50_n = map {$_} @fasta[0..$n50];
print "N50_size: $hash{$fasta[$n50]}\tN50_number: $n50_n\n";


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值