一、关于程序:

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
}

转载于:https://www.cnblogs.com/steamed-bread/p/5641035.html

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

  1. linux系统fasta程序,fasta格式文件处理大全(一)

    前面我们介绍了fastq格式文件的处理,大概有20多个案例,掌握了这些案例,后面拿到fastq格式之后就可以根据需求,使用合适的软件工具进行处理了,从这次内容开始,我们将逐渐介绍fasta格式文件的处 ...

  2. R语言ggplot2可视化、在一张图中画出两条曲线(two lines in same ggplot2 graph)、使用pdf函数将ggplot2可视化图像保存到指定目录的pdf格式文件中

    R语言ggplot2可视化.在一张图中画出两条曲线(two lines in same ggplot2 graph).使用pdf函数将ggplot2可视化图像保存到指定目录的pdf格式文件中 目录

  3. html表格打印成pdf格式文件,使用html2pdf打印PDF格式文件中的数据作为PDF文件

    我想从表单文章中获取一些数据并将其输出到PDF2文件中,并在同一页面上使用html2pdf.但是,当试图将表单数据发布到同一页面时,它不会打开PDF文件,这可能是因为PHP文件的其余部分将出现在if( ...

  4. Python中序列的累积计算

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python中序列的累积计算 cumsum()函数 选择题 以下python代码输出什么? ...

  5. fasta文件中序列的排序

    同样的名为read_1.fa 的fasta文件,里面有若干序列,如: >@r1 TGAATGCGAACTCCGGGACGCTCAGTAATGTGACGATAGCTGAAAACTGTACGATAA ...

  6. 用 Python 从 GFF3 格式文件中查找注释信息

    作者:SunCOOL ,写python的农学生. 什么是GFF3格式文件 GFF全称为general feature format,3表示是第三个版本,这种格式主要是用来注释基因组,由tab分割,共9 ...

  7. python将html转换成excel_Python将HTML格式文件中字段提取到EXCEL表的方法

    首先不需要关心HTML格式文件具体是什么内容(电子病历还是其他网页啥的),这篇主要内容是介绍如何用Python批量处理HTML格式文件.TXT格式文件,以及Python字典列表导出到EXCEL的一种解 ...

  8. 利用python计算fasta文件中ATGC的含量

    1 #!/usr/bin/python3 2 #-*- coding:utf-8 -*- 3 "计算fatsa文件中的不同类型的碱基含量" 4 f=open('./test.txt ...

  9. netcdf库读取nc格式文件中的字符串类型的数据

    netcdf库读取nc格式文件 一.背景 二.工具使用 三.测试代码 四.测试结果 一.背景 这两天解析数据需要解析nc格式的文件,时间是字符串类型的,最开始还以为这个数据有问题呢,使用panoply ...

  10. vim中删除dos格式文件中的^M号的方法以及深度规整文件格式

    在windows平台上开发时, 我们编辑的文件多半是dos格式, 当我们将它们采用xftp或是secureCRT等ssh软件传输到Linux的vim环境下面时, 通常会出现如下令人惨不忍睹的画面: 为 ...

最新文章

  1. HTML在表格右边增加一个表格,如何在表格右侧增加一列
  2. 自习室网上预约系统设计_港澳居民“回乡证”出新规啦!新系统网上预约更方便!...
  3. Linux入门!Linux无法联网解决办法!CentOS7、VMPlayer、VMWareWorkstation16资源!VMWareWorkstation16序列号!VMware安装Centos7!
  4. Re: 从零开始的【comic spider】(序幕)
  5. 负载均衡器 Ribbion
  6. springcloud 网关_Spring Cloud 系列之 Netflix Zuul 服务网关(二)
  7. MySQL高级 —— 高性能索引
  8. Gmail推出视频聊天功能 间接否认欲收购Skype
  9. 无线性能优化:FPS 测试
  10. java编程50题和解释_最新JAVA编程题全集(50题及答案)29515
  11. 高斯c语言百度云免费,高斯数学(1-6年级)精品课程全集百度云下载
  12. 太拼了!张朝阳的一张作息表刷爆朋友圈
  13. 太湖之光超级计算机应用最高奖,“神威·太湖之光”两项应用入围“戈登·贝尔”奖...
  14. NPR——卡通渲染(二)
  15. background-position进行图片定位
  16. java 栈队列区别是什么意思_Java实现数据结构栈stack和队列Queue是什么?
  17. 华为mate20 pro 专业模式拍照
  18. 技法の穴をふさぐ:コスト編 --人月単価は案件ごとにバラバラ公表データで相場を知る
  19. Windows7下新建记事本的四种编码方式
  20. 避免使用std::dynamic_pointer_cast

热门文章

  1. PNG转ICO-在线转换
  2. 深度学习/机器学习入门基础数学知识整理(八):中心极限定理,一元和多元高斯分布
  3. 固体物理期末3套试题
  4. Linux 根分区扩容
  5. 光伏并网逆变器意大利CEI 0-21标准
  6. ZOJ 3880 Demacia of the Ancients(水题)
  7. POJO、PO、DTO、DAO、BO、VO需要搞清楚的概念
  8. oreo另一个意思_墓碑上的“故,显,考,妣”是什么意思?
  9. word格式与pdf格式相互转换
  10. 冰河竟然被腾讯邀请去做技术分享了,这是要起飞的节奏吗?