如何用perl读取序列文件后,找出GC最长的一条

2025-03-03 04:48:17
推荐回答(1个)
回答1:

#!/usr/bin/perl -w

use strict;

my $filename="seq.txt";

my %id_GC_content; #id=>GC_content

open IN,$filename || die $!;

$/=">";; # 设置输入记录分隔符为”>”,并去除第一个”>”

while (){ # $_=,把序列ID行和序列赋值给$_,$_= 可以省略不写

my $id = $1 if(/^(\S+)/);# 获取序列ID

chomp; # 去掉末尾的”>”

s/^.+?\n//;# 删除第一行

s/\s//g; # 删除序列中的空白字符

my $GC = (tr/GC/GC/);#计算G或C碱基个数

my $AT = (tr/AT/AT/);#计算A或T碱基个数

my $len = $GC + $AT;# 计算序列非N长度

my $gc_cont = $len ? $GC / $len : 0; #计算GC含量,如果长度为0,GC含量算0

$id_GC_content{$id}=$gc_cont; #id=>GC_content

}

$/="\n";# 把输入记录分隔符改为默认值

close IN; # 关闭输入文件句柄

my @sort = sort{$id_GC_content{$b} <=> $id_GC_content{$a}} keys(%id_GC_content);

print $sort[0];