首页 perl语言入门实战习题

perl语言入门实战习题

举报
开通vip

perl语言入门实战习题perl语言入门实战习题 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ----------------------------------------------------------------------------------------------------------------------------------------- 《Perl语言入门实战习题》 一、计算FASTA...

perl语言入门实战习题
perl语言入门实战习题 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ----------------------------------------------------------------------------------------------------------------------------------------- 《Perl语言入门实战习题》 一、计算FASTA文件中每条序列的长度; 输入文件,FASTA格式: 注:如果输入文件在windows下产生,在Linux系统下操作时,宜先用dos2unix处理: 用法:dos2unix 输入文件 输出文件: Perl代码: --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ---------------------------------------------------------------------------------------------------------------------------------------------- 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------ ----- #!/usr/bin/perl -w use strict; unless (@ARGV==2) { # @ARGV 传给脚本的命令行参数列表 die"Usage: perl $0 \n"; # 当命令行参数不是2的时候输出使用说明 } my ($infile,$outfile) = @ARGV; # 把命令行参数赋值给输入文件和输出文件 open IN,$infile || die"error: can't open infile: $infile"; # 打开输入文件句柄IN open OUT,">$outfile" || die$!; # 打开输出文件句柄OUT $/=">";; # 设置输入记录分隔符为”>”,并去除第一个”>” while ( my $seq = ){ # 把序列ID行和序列赋值给$seq my $id = $1 if($seq =~ /^(\S+)/); # 获取序列ID chomp $seq; # 去掉末尾的”>” $seq =~ s/^.+?\n//; # 删除第一行 $seq =~ s/\s//g; # 删除序列中的空白字符 my $len = length($seq); # 计算序列长度 print OUT "$id\t$len\n"; # 输出结果到输出文件 } $/="\n"; # 把输入记录分隔符改为默认值 close IN; # 关闭输入文件句柄 close OUT; # 关闭输出文件句柄 二、计算FASTA文件中每条序列的GC含量; 输入文件同上,输出文件: Perl代码: #!/usr/bin/perl -w use strict; unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表 die"Usage: perl $0 \n";# 当命令行参数不是2的时候输出使用说明 } my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件 open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT $/=">";;# 设置输入记录分隔符为”>”,并去除第一个”>” 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 print OUT "$id\t$gc_cont\n"; # 输出结果到输出文件 } $/="\n";# 把输入记录分隔符改为默认值 close IN; # 关闭输入文件句柄 close OUT;# 关闭输出文件句柄 三、求反相互补序列; 输入文件同上,输出文件也是FASTA格式 Perl代码: #!/usr/bin/perl -w use strict; unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表 die"Usage: perl $0 \n";# 当命令行参数不是2的时候输出使用说明 } my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件 open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT $/=">";;# 设置输入记录分隔符为”>”,并去除第一个”>” while (){# $_=,把序列ID行和序列赋值给$_,$_= 可以省略不写 my $id = $1 if(/^(\S+)/);# 获取序列ID chomp; # 去掉末尾的”>” s/^.+?\n//;# 删除第一行 s/\s//g; # 删除序列中的空白字符 $_ = reverse $_; # 序列方向 tr/ATCG/TAGC/; # 序列互补 print OUT ">$id\n",$_,"\n"; # 输出结果到输出文件 } $/="\n";# 把输入记录分隔符改为默认值 close IN; # 关闭输入文件句柄 close OUT;# 关闭输出文件句柄 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ---- 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------ ----- 四、列表信息整合; 输入列表1:序列长度文件 输入文件2:序列测序覆盖深度文件 输出文件:把上述两个列表的信息整合成一个列表,并且最后一行给出汇 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 果: Perl代码 #!/usr/bin/perl -w use strict; (@ARGV==3) || die"Usage: perl $0 \n"; # 当命令行参数不是3的时候输出使用说明 my ($infile1,$infile2,$outfile) = @ARGV; # 把命令行参数赋值给输入文件1、输入文件2和输出文件 my %id_len; # 定义一个哈希 open IN1,$infile1 || die$!; # 打开第一个文件句柄 while(){ my ($id,$len) = split /\s+/,$_; # split函数用空白符号切割每一行的内容 $id_len{$id} = $len; # 哈希赋值:id => length } close IN1; # 关闭第一个文件句柄 open IN2,$infile2 || die$!; # 打开第2个文件句柄 open OUT,">$outfile" || die$!; # 打开输出文件句柄 my $tol_len = 0; # 定义总长度变量,并赋值为0 my $tol_depth = 0; # 定义总深度变量,并赋值为0 while (){ my ($id,$depth) = split; # split函数用空白符号切割每一行的内容 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ------------------------------------------------------------------------------------------------------------------------------------------ ---- 精品文档 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ----------------------------------------------------------------------------------------------------------------------------------------- my $len = $id_len{$id}; # 序列长度 print OUT join("\t",$id,$len,$depth),"\n"; # 输出整合信息到输出文件 $tol_len += $len; # 长度累加 $tol_depth += $len * $depth; # 深度累加 } $tol_depth /= $tol_len; # 计算总体平均深度 print OUT "Total\t$tol_len\t$tol_depth\n"; # 输出汇总结果到输出文件 close IN2; # 关闭第二个输入文件句柄 close OUT; # 关闭输出文件句柄 五、串流程; Perl在工作中常用于串流程,现有同事写了3个perl脚本分三步将输入文件,infile.txt处理成最终的final.result: 第1步:perl step1.pl infile.txt output1 第2步:perl step2.pl infile.txt output2 第3步:perl step3.pl output1 output2 final.result 为提高工作效率,现需要写一个脚本使用infile.txt 作为输入文件,直接得到final.result,中间产生的文件结果不保留。 #!/usr/bin/perl -w use strict; unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表 die"Usage: perl $0 \n";# 当命令行参数不是2的时候输出使用说明 } my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件 my $temp_file = “temp.$$”; # 临时文件,$$为进程号,这样可以保证文件名字的唯一性 system“perl step1.pl $infile $temp.1 perl step2.pl $infle $temp.2 perl step3.pl $temp.1 $temp.2 $outfile rm $temp.1 $temp.2” #使用system调用3个perl脚本进行处理 --------------------------精品文档,可以编辑修改,等待你的下载,管理,教育文档---------------------- ----------------------------------------------------------------------------------------------------------------------------------------------
本文档为【perl语言入门实战习题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_672950
暂无简介~
格式:doc
大小:93KB
软件:Word
页数:9
分类:企业经营
上传时间:2017-09-28
浏览量:51