perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键
一、关于程序:
FUN:计算FASTA文件中每条序列中G和C的含量百分比,输出最大值及其id
INPUT:FASTA格式文件
>seq1
CGCCGAGCGCTTGACCTCCAGCAAGACGCCGTCTGGCACATGCAACGAGCTGTAGCAGAC
>seq2
ATGCCTAGAACGTTCGAGACTTCTCGGGTGCGGTAGAATTAGCCATTCGACCGACTTCCA
GCATCTGCGAGCCGCCTGTTGATTGCATCCGCCGGGGACGCAACAAGGCAAGGCCCTAAC
OUTPUT:最高含量的序列id及其含量(这是上面的结果)
seq1
63.333333%
二、编程思想及代码
当是注释行时(>……),获得序列 ID ,并跳过该次循环;当读到非注释行即序列行时,记录该行“G和C的含量”以及“序列的总含量”,这都可以利用perl上下文实现。(但是在这里有一些疑惑——当把14行@num换成$num会出现计算错误,知道的朋友欢迎留言)
1 use strict;
2 my %GC_content; # id=>GC_content
3 my %sequences; # id=>sequence
4 my ($id, $sum); # id, 每个序列的字符个数
5 my @num; # 中间变量,用于存储单行中某字符的含量
6 while(my $seq = <>){
7 chomp($seq);
8 if($seq =~ m/^>(.*)/){
9 $id = $1;
10 next;
11 }
12 @num = ($seq =~ m/(G|C)/g);
13 $GC_content{$id} += @num;
14 @num = ($seq =~ m/(.)/g);
15 $sequences{$id} += @num;
16 }
17
18 foreach(keys(%GC_content)){
19 $GC_content{$_} /= $sequences{$_};
20 }
21 my @sort = sort{$GC_content{$b} <=> $GC_content{$a}} keys(%GC_content);
22 printf("%s\n%.6f%\n", $sort[0], $GC_content{$sort[0]}*100);
三、技巧
神奇的perl,神奇的sort!!
对数组(或者哈希)排序获得下标的方式:
# 数字排序:
my @arr = qw(2 3 41 2 34 );
my @result1 = sort{$a <=> $b} @arr;
# 获得下标:
my @result2 = sort{$arr[$a] <=> $arr[$b]} 0..$#arr;
# 获得key:
my %hash = (
one =>1,
two =>5,
tree=>9
);
my @result3 = sort{$hash{$a} <=> $hash{$b}} keys(%hash);
print "数字排序:@result1\n获得下标:@result2\n获得key:@result3\n";
备注:贴一个感觉不错的代码(学习学习)
$/ = '>';
<>; # 读一次">"前的序列,以免下面代码出错
while (<>) {
chomp;
my ($id, @ary) = split '\n';
my $seq = join '', @ary;
my $ratio = &GC_content($seq);
if ($ratio > $highest) {
$highest = $ratio;
@result = ($id, $ratio);
}
}
print join "\n", @result; sub GC_content {
my ($seq) = @_;
my $ratio = $seq =~ s/([CG])/$1/g / length($seq) * 100;
return $ratio
}
perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键的更多相关文章
- 导出文本、表格、图像到PDF格式文件中(学习整理)
1.测试例子: 需要导入的外部jar包: 相关API http://www.coderanch.com/how-to/javadoc/itext-2.1.7/com/lowagie/text/pack ...
- 【Python小试】判断一条序列GC含量高低
题目: 随便给定一条序列,如果GC含量超过65%,则认为高. 编程: from __future__ import division #整数除法 def is_gc_rich(dna): length ...
- 嵌入式 H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流
一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1 MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...
- [转]【流媒體】H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流
[流媒體]H264—MP4格式及在MP4文件中提取H264的SPS.PPS及码流 SkySeraph Apr 1st 2012 Email:skyseraph00@163.com 一.MP4格式基本 ...
- 多媒体开发之---H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流
一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1 MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...
- perl 读取json 格式的文件
使用JSON 模块中的 decode_json 函数,将json文件中的数据解码为perl 中的对象,然后进行处理 代码如下: #!/usr/bin/env perl use JSON; use En ...
- perl 通过<<和文件句柄将数据写入到文件中去
可以通过文件句柄和<<运算符将文件内容写入到文件中去 #!usr/bin/perl -W use strict; use Spreadsheet::ParseExcel; use utf8 ...
- 利用kseq.h parse fasta/fastq 文件
在分析中经常需要统计fasta/fastq文件的序列数和碱基数, 但是没有找到一些专门做这件事的小工具,可能是这个功能太简单了: 之前用自己写的perl的脚本统计这些信息, 当fastq文件非常大时, ...
- [OSG][转]osg格式文件
转自:http://blog.csdn.net/timothyfly/article/details/7826139 osg格式文件中如何处理多个节点共享一个子节点 下面一段程序中,共有三个Group ...
随机推荐
- sip信令跟踪工具sngrep
概述 在VOIP的使用过程中,最常见的问题就是信令不通和语音质量问题. 通常的问题跟踪手段包括日志分析.抓包分析. 抓包的工具有wireshark.tcpdump等等,如果是只针对sip信令的抓包,则 ...
- 【二食堂】Alpha - Scrum Meeting 8
Scrum Meeting 8 例会时间:4.18 11:40 - 12:10 进度情况 组员 昨日进度 今日任务 李健 1. 实体的添加和关系的添加实现的有bug,柴博和刘阳进行了帮助issue 1 ...
- 【二食堂】Alpha- 发布声明
MarkTexting Alpha版本发布声明 今日我们的MarkTexting正式上线了! 功能介绍 我们实现了一个简单的文本标注生成知识图谱的网站,在Alpha阶段,我们实现的功能有: 登陆注册 ...
- stm32学习笔记之串口通信
在基础实验成功的基础上,对串口的调试方法进行实践.硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中. b) 初始化函数定义: void USART_Confi ...
- 最详细的windows10系统封装教程
目录 自定义封装(定制)windows10教程 关于本教程及用到的工具的声明 第一阶段: 封装前的各种环境准备 安装vmware 创建虚拟机 对虚拟机进行分区 配置好BIOS 为虚拟机安装window ...
- 源码解析-Abp vNext丨分布式事件总线DistributedEventBus
前言 上一节咱们讲了LocalEventBus,本节来讲本地事件总线(DistributedEventBus),采用的RabbitMQ进行实现. Volo.Abp.EventBus.RabbitMQ模 ...
- 树行DP小结
顾名思义:就是在树上做的DP,依据DFS的性质,在访问过儿子之后返回后将儿子的状态传递给父亲... 先看例题: 此题用贪心也能过,不过正解是DP. 对于树上的DP我们可以直接考虑最优解下各点的状态来方 ...
- hdu 5084 HeHe (观察思考题)
题意: 给一个n行n列的矩阵M.这个矩阵M由2n-1数构成.分别是t1,t2,....t(2n-1). m个query.每个query形式:ri, ci. 第i个query的答案 ans[i]=E[( ...
- VNC服务器的搭建(带图形化支持)
环境:centos7.6最小化安装 图形化支持 如果希望安装简单的图形支持的话,仅包含gnome的最最最最基础的包的话可以使用以下命令 yum groups install "X Windo ...
- Linux高级命令及mysql数据安装
Linux系列--高级命令--mysql数据库安装 数据库是用来组织.存储和管理数据的仓库 1.安装数据库:执行命令yum -y install mysql -server 2.启动数据库:安装完毕, ...