能帮我讲讲这个PERL程序么,我想写一个统计ATCG的小程序··这个是跟前辈要的,但是看不太懂

能帮我加个注释么·····刚看完一遍PERL第四版··表示想动手写还是有点生疏···#!/usr/bin/perl-wusestrict;my$file=shift;op... 能帮我加个注释么·····刚看完一遍PERL第四版··表示想动手写还是有点生疏···

#!/usr/bin/perl -w
use strict;
my $file=shift;
open IN,$file;
while(my $line=<IN>){
chomp($line);
my $t2=$line=~tr/ATGC/TACG/;
print $t2,"\n";
}
展开
 我来答
solaris4u
推荐于2016-06-06 · TA获得超过309个赞
知道小有建树答主
回答量:107
采纳率:80%
帮助的人:94.5万
展开全部
#!/usr/bin/perl -w
use strict; #使用 strict 校验语法.
my $file=shift;  #读取执行程序时的第一个参数作为变量 $file. 这里应该是指文件名.
open IN,$file; 
while(my $line=<IN>){  #打开并读取文件的内容
chomp($line);  #去掉每一行结尾的换行符.
my $t2=$line=~tr/ATGC/TACG/;  #统计这一行中ATGC的次数 他程序有问题. 应该是 $t2=($line=~s/ATGC/TACG/g);
print $t2,"\n";   #输出次数结果
}


试了一下. 他这个程序有问题. 是统计每一行的ATGC的出现次数. 而且不对, 不应该用tr,, 应该用s.


我改了一下.


#!/usr/bin/perl -w
my $file=shift;
open IN,$file;
my @line=<IN>;  #读取整个文件到数组
my $lines=join("-",@line);  #把数组合并成一个字符串
my $t2=($lines=~s/ATGC/TACG/g);  #在这个大字符串中统计ATGC出现的次数
print "$t2\n";


我这个是统计整个文件中ATGC出现的次数的.

在我的下载器上运行了一下.. 貌似没问题.


root@Nas:~# cat a.txt
ATGC
111ATGC222
111222ATGC ATGC
TACG
root@Nas:~# 
root@Nas:~# ./test.pl a.txt
4
root@Nas:~#
追问
你好,非常感谢您的回答,请问一下s///不是替换的意思么,如果我想统计A,T,C,G各出现的次数应该怎么修改呢
追答

s///是替换的意思.  my $t2=($lines=~s/ATGC/TACG/g)  这句的意思是统计 (ATGC) 这个组合替换的次数. 也就是统计在原字符串里出现的次数. 如果是统计单个字母的话. tr满足要求. 我简单改了一下. 试了试能用. 代码比较糙.. 你自己优化吧..


#!/usr/bin/perl -w
my $file=shift;
open IN,$file;
my @line=<IN>;
my $lines=join("-",@line);
my $t1=($lines=~tr/A/ /);
my $t2=($lines=~tr/T/ /);
my $t3=($lines=~tr/G/ /);
my $t4=($lines=~tr/C/ /);
print "A: $t1\n";
print "T: $t2\n";
print "G: $t3\n";
print "C: $t4\n";

运行结果


root@Nas:~# cat a.txt
A
AT
ATG
ATGC
root@Nas:~# 
root@Nas:~# ./test.pl a.txt
A: 4
T: 3
G: 2
C: 1
root@Nas:~#
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式