生信人写程序1. Perl语言模板及配置

生物信息领域常用语言

个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python/Java…(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准。

生物信息常用语言非常广泛,我常用的有Perl, R, Shell,此外参与网页制作还用过PhP+mySQL,写博客用Markdown。这些其实都是非常小众的语言,如果和计算机专业的人交流,对方可能没听过这些语言。本系列“生信人写程序”主要以Perl为主,并伴随一些零星的R和Shell编程的经验和技巧。对于生信Perl使用人员有个交流和互相提高的平台,让新人少走点弯路。对于没有任何Perl基础强例建议别入坑,想学生信找Python教程吧,不解释看下图。

TIOBE世界编程语言使用排行
在这里插入图片描述

我们可以看到世界前三是Java, C, C++,大家都听说过;第四是Python,目前在生领领域有取代Perl地位的趋势,目前Perl列第9(世界十大语言之一)下降一位。R语言的数据分析领域有应用越来越广泛,今年上升两位至14名;Shell由于版本和各类较多,在50-100名间有4种,此语言只建议快速解决小问题,不建议写太长的任务,很容易跨平台不兼容。

总结:

生信常用语言:Shell+R+Python/Perl

世界三大语言:Java, C, C++

生信语言的排名:Python 4th, Perl 9th, R 16th

Perl写作环境模板推荐

很多人三行两行或直接命令行用perl直接解决问题,虽然快,但是不容重用和别人使用。因此,良好的写作环境和模板是效率和专业的体现,即提高自己的代码重用性,也方便交流和他人使用。

编程环境IDE

推荐使用:Editplus 4.0,网上到处都是注册机和序列号,随便用,下载址搜不到可以点链接:http://pan.baidu.com/s/1jHJJ1qe 密码:6xm6。优点是可配置模板,可直接编辑服务器脚本(省略上传步骤),高效的代码调试。

编程模板

是解决常用功能的写作模板,如帮助文档部分(提高代码重用和版本管理,方便其他人使用),命令行参数管理(可读性的命令行是程序的基础),程序运行时间统计(项目时间管理),常用文件读取数据结构样式(方便修改文件输入和输出)等;

下面是实现这样功能的模板:

#!/usr/bin/perl -w
# 加载时间管理,参数管理,文件名和路径处理的基础包,无须安装
use POSIX qw(strftime);
use Getopt::Std;
use File::Basename;###############################################################################
#命令行参数据的定义和获取,记录程序初始时间,设置参数默认值
#Get the parameter and provide the usage.
###############################################################################
my %opts;
getopts( 'i:o:d:h:', \%opts );
&usage unless ( exists $opts{i} && exists $opts{o} );
my $start_time=time;
print strftime("Start time is %Y-%m-%d %H:%M:%S\n", localtime(time));
print "Input file is $opts{i}\nOutput file is $opts{o}\n";
print "Database file is $opts{d}\n" if defined($opts{d});
$opts{h}=1 unless defined($opts{h});###############################################################################
#读入的数据或注释文件,用于与输入文件比较或注释(可选),提供三种方式
#Read the database in memory(opt)
###############################################################################
#open DATABASE,"<$opts{d}";
# 1. 散列结构数据库,要求数据文件有唯一ID并且无顺序要求
#my %database; #database in hash
#while (<DATABASE>) {
#    chomp;
#    my @tmp=split/\t/;
#    $database{$tmp[1]}=$tmp[2];
#}
# 2. 数组结构数据库,无唯一ID,但有顺序要求
#my (@tmp1,@tmp2); #database in array
#while (<DATABASE>) {
#    chomp;
#    my @tmp=split/\t/;
#    push @tmp1,$tmp[1];
#    push @tmp2,@tmp[2];
#}
#close DATABASE;
# 3. 批量数据文件,读取一批有相似结构的文件
#open a list file
#my %list;
#my @filelist=glob "$opts{i}";
#foreach $file(@filelist){
#    open DATABASE,"<$file";
#    $file=basename($file);
#    while (<DATABASE>) {
#        my @tmp=split/\t/;
#        $list{$file}{nr}++;
#    }
#    close DATABASE;
#}###############################################################################
#Main text.
###############################################################################
# 正文部分,读取输入文件,列出输入和输入文件的三行作为示例,方便编程处理数据
open INPUT,"<$opts{i}";
#chrm0    snppos1          ref2     mat_gtyp3        pat_gtyp4        c_gtyp5  phase6   mat_all7 pat_all8 cA9      cC10      cG11      cT12      winning SymCls  SymPval BindingSite     cnv
#1       4648    C       A       C       M       PHASED  C       A       0       11      0       0       M       Asym    0.0009765625    -1      0.902113
open OUTPUT,">$opts{o}";
#chrm    snppos          ref     mat_gtyp        pat_gtyp        c_gtyp  phase   mat_all pat_all cA      cC      cG      cT      winning SymCls  SymPval BindingSite     cnv
#1       4648    C       A       C       M       PHASED  C       A       0       11      0       0       M       Asym    0.0009765625    -1      0.902113my %count;
# h参数用于去除有文件头的行
while ($opts{h}>0) { #filter header<INPUT>;$opts{h}--;
}
# 输入和输入处理部分,常用按行读取处理并输入,默认按tab分割数据
while (<INPUT>) {chomp;my @tmp=split/\t/;print OUTPUT "$tmp[0]\t$tmp[1]\n";
}
close INPUT;
close OUTPUT;###############################################################################
#Record the program running time!
# 输出程序运行时间
###############################################################################
my $duration_time=time-$start_time;
print strftime("End time is %Y-%m-%d %H:%M:%S\n", localtime(time));
print "This compute totally consumed $duration_time s\.\n";###############################################################################
#Scripts usage and about.
# 程序的帮助文档,良好的描述是程序重用和共享的基础,也是程序升级和更新的前提
###############################################################################
sub usage {die(qq!
Usage:    template.pl -i inpute_file -o output_file -d database -h header num
Function: Template for Perl
Command:  -i inpute file name (Must)-o output file name (Must)-d database file name-h header line number,s default 0
Author:   Liu Yong-Xin, liuyongxin_bio\@163.com, QQ:42789409
Version:  v1.0
Update:   2017/6/2
Notes:    
\n!)
}

模板导入Editplus

将上述代码保存为template.pl,在editplus中选择Tools — Preference — Template — Perl,点击template.pl右边的…按键,选择你自己的template.pl即可,以后选择perl脚本会自己加载该模板。 希望对大家有帮助!

Reference

  1. https://www.tiobe.com/tiobe-index/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/690900.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2中npm i报错gyp info it worked if it ends with ok

当我拿到一个老的vue2项目&#xff0c;怎么也起不起来&#xff0c;后来找到报错原因&#xff0c;如上图所示&#xff0c;可以看到报错的path是node-sass&#xff0c;那么就猜想应该是sass版本和node版本不匹配。 于是我查看了我的node版本是16 而sass版本是下图所示&#xff0c…

Hive行列转换应用与实现

Hive行列转换应用与实现 1.多行转多列 问题引入 解决方法 2.多行转单列 问题引入 解决方法 3.多列转多行 问题引入 解决方法 4.单列转多行

SQL分库分表

一、介绍 问题分析 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增长&#xff0c;若采用单数据库进行数据存储&#xff0c;存在以下性能瓶颈: 1. IO瓶颈:热点数据太多&#xff0c;数据库缓存不足&#xff0c;产生大量磁盘IO&#xff0c;效率较低。…

基于FPGA的NC图像质量评估verilog实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 vivado2019.2和matlab2022a测试&#xff0c;结果如下&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale …

通过mvn archetype 创建一个spring boot start 工程

mvn archetype https://maven.apache.org/archetype/index.html 遇到的问题 对于想自定义一个spring-boot-start的同学,比如 Springboot自定义Starter启动器 整个过程很繁琐。 定义属性开关增加 spring boot test start插件定义自动装载 spring.factories or org.springfra…

【QT学习】补充:qt使用已经存在的类

1.右键项目--》添加现有文件 注意&#xff1a;不是添加新文件&#xff01;&#xff01;&#xff01; 2.添加配置

求正方形中一角四边形的面积

求绿色四边形的面积&#xff1f; 假设大正方形的边长为2a 通过中间的点做十字的辅助线&#xff0c;假设两条辅助线的长度为xy,uv 所以 1/2ay1/2au42① 1/2ay1/2av38② 1/2ax1/2av28③ ①③ 1/2ay1/2au1/2ax1/2av4228 &#xff08;1/2ay1/2av&#xff09;1/2au1/2ax4228 代入…

ERROR 1045 (28000) Access denied for user ‘root‘@‘IP‘(using password YES/NO)

查看权限 要查看MySQL用户的权限&#xff0c;您可以使用SHOW GRANTS语句。这将列出用户的权限&#xff0c;包括授予的权限和可以授予其他用户的权限。 以下是查看当前用户权限的SQL命令&#xff1a; SHOW GRANTS; 如果您想查看特定用户的权限&#xff0c;可以使用以下命令&…

Container exited with a non-zero exit code 1

最近遇到运行yarn pi的时候遇到如下问题。 很明显是container出错了&#xff0c;但是错误没有提示的很清楚。然后去看nodemanager日志也是如此。这时候笔者第一个想到要去看container的执行日志。container具体的日志目录位置是通过YARN的配置文件&#xff08;如yarn-site.xml&…

校园管理系统,基于 SpringBoot+Vue+MySQL 开发的前后端分离的校园管理系统设计实现

目录 一. 前言 二. 功能模块 2.1. 管理员功能模块 2.2. 用户功能模块 2.3. 院校管理员功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身…

网络Http和Socket通讯(基于面试)

每日一句&#xff1a;想得到世上最好的东西&#xff0c;先得让世界看到最好的你 目录 面试问OSI或TCP/IP,怎么回答&#xff1f; 面试问HTTP&#xff1f; 面试问Get类型&#xff0c;Pot类型区别&#xff1f; 面试什么是Socket套接字&#xff1f; 面试问什么是数据粘包&…

【C语言题解】用函数来模拟实现strlen()、strcpy()、strcmp()、strcat()

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ 学习了函数后&#xff0c;老师让我们用函数来实现上面这四个字符串函数。 我们首先来了解一下这四个字符串函数&#xff1a; 1.strlen函数 用于获取字符串长度&#xff08;不包括末尾…