一、关于程序:

FUN:计算FASTA文件中每条序列中G和C的含量百分比,输出最大值及其id

INPUT:FASTA格式文件

  1. >seq1
  2. CGCCGAGCGCTTGACCTCCAGCAAGACGCCGTCTGGCACATGCAACGAGCTGTAGCAGAC
  3. >seq2
  4. ATGCCTAGAACGTTCGAGACTTCTCGGGTGCGGTAGAATTAGCCATTCGACCGACTTCCA
  5. GCATCTGCGAGCCGCCTGTTGATTGCATCCGCCGGGGACGCAACAAGGCAAGGCCCTAAC

OUTPUT:最高含量的序列id及其含量(这是上面的结果)

  1. seq1
  2. 63.333333%

二、编程思想及代码

当是注释行时(>……),获得序列 ID ,并跳过该次循环;当读到非注释行即序列行时,记录该行“G和C的含量”以及“序列的总含量”,这都可以利用perl上下文实现。(但是在这里有一些疑惑——当把14行@num换成$num会出现计算错误,知道的朋友欢迎留言)

  1. 1 use strict;
  2. 2 my %GC_content; # id=>GC_content
  3. 3 my %sequences; # id=>sequence
  4. 4 my ($id, $sum); # id, 每个序列的字符个数
  5. 5 my @num; # 中间变量,用于存储单行中某字符的含量
  6. 6 while(my $seq = <>){
  7. 7 chomp($seq);
  8. 8 if($seq =~ m/^>(.*)/){
  9. 9 $id = $1;
  10. 10 next;
  11. 11 }
  12. 12 @num = ($seq =~ m/(G|C)/g);
  13. 13 $GC_content{$id} += @num;
  14. 14 @num = ($seq =~ m/(.)/g);
  15. 15 $sequences{$id} += @num;
  16. 16 }
  17. 17
  18. 18 foreach(keys(%GC_content)){
  19. 19 $GC_content{$_} /= $sequences{$_};
  20. 20 }
  21. 21 my @sort = sort{$GC_content{$b} <=> $GC_content{$a}} keys(%GC_content);
  22. 22 printf("%s\n%.6f%\n", $sort[0], $GC_content{$sort[0]}*100);

三、技巧

神奇的perl,神奇的sort!!

对数组(或者哈希)排序获得下标的方式:

  1. # 数字排序:
  2. my @arr = qw(2 3 41 2 34 );
  3. my @result1 = sort{$a <=> $b} @arr;
  4. # 获得下标:
  5. my @result2 = sort{$arr[$a] <=> $arr[$b]} 0..$#arr;
  6. # 获得key:
  7. my %hash = (
  8. one =>1,
  9. two =>5,
  10. tree=>9
  11. );
  12. my @result3 = sort{$hash{$a} <=> $hash{$b}} keys(%hash);
  13. print "数字排序:@result1\n获得下标:@result2\n获得key:@result3\n";

备注:贴一个感觉不错的代码(学习学习)

  1. $/ = '>';
  2. <>; # 读一次">"前的序列,以免下面代码出错
  3. while (<>) {
  4. chomp;
  5. my ($id, @ary) = split '\n';
  6. my $seq = join '', @ary;
  7. my $ratio = &GC_content($seq);
  8. if ($ratio > $highest) {
  9. $highest = $ratio;
  10. @result = ($id, $ratio);
  11. }
  12. }
  13. print join "\n", @result;
  14.  
  15. sub GC_content {
  16. my ($seq) = @_;
  17. my $ratio = $seq =~ s/([CG])/$1/g / length($seq) * 100;
  18. return $ratio
  19. }

perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键的更多相关文章

  1. 导出文本、表格、图像到PDF格式文件中(学习整理)

    1.测试例子: 需要导入的外部jar包: 相关API http://www.coderanch.com/how-to/javadoc/itext-2.1.7/com/lowagie/text/pack ...

  2. 【Python小试】判断一条序列GC含量高低

    题目: 随便给定一条序列,如果GC含量超过65%,则认为高. 编程: from __future__ import division #整数除法 def is_gc_rich(dna): length ...

  3. 嵌入式 H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...

  4. [转]【流媒體】H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    [流媒體]H264—MP4格式及在MP4文件中提取H264的SPS.PPS及码流 SkySeraph Apr 1st 2012  Email:skyseraph00@163.com 一.MP4格式基本 ...

  5. 多媒体开发之---H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...

  6. perl 读取json 格式的文件

    使用JSON 模块中的 decode_json 函数,将json文件中的数据解码为perl 中的对象,然后进行处理 代码如下: #!/usr/bin/env perl use JSON; use En ...

  7. perl 通过<<和文件句柄将数据写入到文件中去

    可以通过文件句柄和<<运算符将文件内容写入到文件中去 #!usr/bin/perl -W use strict; use Spreadsheet::ParseExcel; use utf8 ...

  8. 利用kseq.h parse fasta/fastq 文件

    在分析中经常需要统计fasta/fastq文件的序列数和碱基数, 但是没有找到一些专门做这件事的小工具,可能是这个功能太简单了: 之前用自己写的perl的脚本统计这些信息, 当fastq文件非常大时, ...

  9. [OSG][转]osg格式文件

    转自:http://blog.csdn.net/timothyfly/article/details/7826139 osg格式文件中如何处理多个节点共享一个子节点 下面一段程序中,共有三个Group ...

随机推荐

  1. Alpha阶段发布声明

    发布声明 Alpha 1.Alpha版本功能说明 功能列表和详情图 模块 功能 展示 首页 查看首页博文,搜索博文,可供未登录用户使用 动态 查看推荐动态给未登录用户使用,登录用户可以查看关注动态.我 ...

  2. springboot整合rabbitmq实现生产者消息确认、死信交换器、未路由到队列的消息

    在上篇文章  springboot 整合 rabbitmq 中,我们实现了springboot 和rabbitmq的简单整合,这篇文章主要是对上篇文章功能的增强,主要完成如下功能. 需求: 生产者在启 ...

  3. cat userlist(课上练习)

    问题描述 Linux文件系统的三层抽象是什么? 写出Cat userlist的过程,要详述目录文件,i-node.数据块,要画图示意. 假设块大小为4k, userlist的大小不小于10k,自己假设 ...

  4. 求树的直径【两遍BFS】

    两遍BFS.从任意一个点出发,第一遍可以找到直径的一端,从这端出发即可找到另外一端. 证明:从U点出发,到达V[画个图便清晰了] 1.如果U在直径上,则V一定是直径的一个端点. 2.如果U不在直径上. ...

  5. LOTO示波器配合VI曲线测试仪在电路板维修中的应用

    LOTO示波器配合VI曲线测试仪在电路板维修中的应用 市面上的VI曲线测试仪价格都在2000元到万元不等,同时大多携带不方便,有个别产品可以携带,但是功能单一(比如无法保存曲线,对比曲线等),那么LO ...

  6. k8s入坑之路(15)kubernetes共享存储与StatefulSet有状态

    共享存储 docker默认是无状态,当有状态服务时需要用到共享存储 为什么需要共享存储: 1.最常见有状态服务,本地存储有些程序会把文件保存在服务器目录中,如果容器重新启停则会丢失. 2.如果使用vo ...

  7. 在线编辑Word——插入图表

    在Word中可插入图表,配合使用表格能够更加全方位的展示数据的可信度并增加数据的可读性.本文将通过使用在线编辑器 Spire.Cloud Word 演示如何来插入图表,并设置相关格式化操作.具体步骤如 ...

  8. win10 python3.8 wxpython.whl 安装步骤

     wxpython是python开发常用图形用户界面(GUI)工具之一,GUI因其直观便捷,对我们提高开发效率一定帮助.这里介绍一下新版本wxPython 4.0.1的安装过程及注意事项. 第1步:下 ...

  9. Linux 下权限的管理

    Linux 下权限的管理 我们都知道,Linux系统对于用户的权限管理是十分严格的. 那么,我们就来具体了解一下. 一. 用户 在Linux中按照类型用户分为两种:1.超级用户 2.普通用户 那么它们 ...

  10. 我罗斯方块第二次作业(Block类)

    负责任务 完善Block类的相关函数及变量: 对Block类的函数功能进行调试: github项目地址. 开发日记 2020.5.11 今天和朋友们讨论了如何分工的工作,我负责的部分是Block类的完 ...