品牌网站建设策划/百度百科推广联系方式

品牌网站建设策划,百度百科推广联系方式,有后台管理系统网站管理,经典网站设计作品我手头有一个脚本,用于从blastp序列比对的结果文件中,进行文本处理, 获取序列比对最优的hit记录 #!/usr/bin/perl -w use strict;my ($blast_out) ARGV; my $usage "This script is to get the best hit from blast output file wit…

我手头有一个脚本,用于从blastp序列比对的结果文件中,进行文本处理,

获取序列比对最优的hit记录

#!/usr/bin/perl -w
use strict;my ($blast_out) = @ARGV;
my $usage = "This script is to get the best hit from blast output file with 1 input sequence.
usage: $0 <blast_output_file>
";
die $usage if @ARGV<1;open(BLASTOUT,$blast_out)||die("open $blast_out error!\n");my $query = "";
my $score = "";
my $p_value = "";
my $hit = "";
my $flag = 0;
while(<BLASTOUT>){chomp;if($flag == 0){if(/^Query=\s*(\w+)/){$query = $1;}elsif(/^Sequences producing High-scoring Segment Pairs:/){$flag = 1;}else{next;}}else{if(/^([\w\.\-]+)\s+.+\s+([0-9]+)\s+([0-9e\-\.]+)\s+[0-9]+$/){$hit = $1;$score = $2;$p_value = $3;last;}else{next;}}
}close BLASTOUT;print "Best hit to $query is: $hit, with score $score, P-value $p_value.\n";exit;

然后我们逐行解读:
1,表头的一些注释部分

#!/usr/bin/perl -w # 表明这是一个perl脚本,-w表示打开警告
# 参考https://www.runoob.com/perl/perl-environment.htmluse strict;
# use strict表示使用严格模式,这样可以避免一些不规范的写法

2,然后是输入以及输出文件的一些准备以及注释:

我们可以使用一个参考脚本来测试一下

#!/usr/bin/perl -w
use strict;# 测试不同的参数获取方式
print "命令行参数:@ARGV\n\n";# 方式1:列表赋值 - 获取第一个元素
my ($var1) = @ARGV;
print "my (\$var1) = \@ARGV 结果:\n";
print "\$var1 = '$var1'\n\n";# 方式2:标量赋值 - 获取数组长度
my $var2 = @ARGV;
print "my \$var2 = \@ARGV 结果:\n";
print "\$var2 = '$var2'\n\n";# 方式3:列表赋值 - 获取多个元素
my ($arg1, $arg2, $arg3) = @ARGV;
print "my (\$arg1, \$arg2, \$arg3) = \@ARGV 结果:\n";
print "\$arg1 = '", (defined $arg1 ? $arg1 : "未定义"), "'\n";
print "\$arg2 = '", (defined $arg2 ? $arg2 : "未定义"), "'\n";
print "\$arg3 = '", (defined $arg3 ? $arg3 : "未定义"), "'\n";

如果不提供参数的话,效果如下:

如果只提供一个参数:

如果提供两个参数的话:

如果提供3个参数的话:

——》综上,我们可以看到效果是:

my ($var1) = @ARGV

如果是加个括号的话,获取的是数组中第1个传入的参数

my $var2 = @ARGV

如果没有加括号的话,捕获的是数组的长度

my ($arg1, $arg2, $arg3) = @ARGV

如果是这样写的话,那么就可以访问数组的下标元素

——》所以综上

my ($blast_out) = @ARGV;
# 类似于shell脚本中 outputfile=$1这种写法
# 传给脚本的命令行参数列表,参考https://www.runoob.com/perl/perl-special-variables.html
# 变量定义使用my关键字,生命期直到其所在的代码块结束或者文件的末尾
# 从 @ARGV 数组中取出第一个元素,并将其赋给 $blast_out,与my $blast_out = @ARGV不同,后者会被赋予数组长度也就是元素数量
# 与my ($arg1, $arg2, $arg3) = @ARGV;写法区分

3,还有1个是函数的帮助文档

#!/usr/bin/perl -w
use strict;# 定义使用说明
my $usage = "这个脚本演示使用说明变量的用法。
用法: $0 <参数1> [参数2] ...参数1: 必需的第一个参数参数2: 可选的第二个参数
";# 检查参数
if (@ARGV < 1) {die $usage;  # 如果参数不足,终止并显示使用说明
}# 打印获取的参数
print "成功运行!\n";
print "您提供的第一个参数是: $ARGV[0]\n";if (defined $ARGV[1]) {print "您提供的第二个参数是: $ARGV[1]\n";
}

主要问题: die 语句会立即终止脚本执行,所以 die 之后的 print(“参数不足”) 语句永远不会被执行;

逻辑顺序: 如果您想打印错误信息,应该先打印,然后再 die

——》然后die usage的用法我们可以再仔细学习观察一下:

#!/usr/bin/perl -w
use strict;# 定义使用说明
my $usage = "当你看到这个信息的时候,表明你提供的参数有问题,你应该看看这个程序是怎么使用的!\n这个脚本该如何使用\n用法如下:\n $0 <参数1>" ;if (@ARGV < 1)
{print("参数不足!\n");die $usage; 
}
else
{print "提供参数的个数为:", scalar(@ARGV), "\n";
}

4,然后就是文件操作错误示范:
从语法规范上讲:

此处提供方法:如何在perl中查看函数帮助文档

# 查看特定函数文档
perldoc -f function_name
# 例如:
perldoc -f open
perldoc -f die# 查看 Perl 操作符
perldoc perlop# 查看特殊变量
perldoc perlvar  # 查看内置函数列表
perldoc perlfunc

此处涉及到perl中句柄的相关知识:

5,然后就是函数中的编程部分:

从循环语句开始:

然后就是正则表达式,/ /中间的部分

其实就是捕获Query=开头的行中的除开空格部分的单词字符

其实整个正则表达式的匹配和正则表达式中一个子串(也就是所谓的捕获组)概念,在我之前的博客awk的内置函数中的match出现过;

然后flag=1的部分的循环

这部分的正则表达式详解:

6,然后就是文件最后结尾的部分:

——》

综上,总体就是:
1个用于blastP输出结果的文本抓取脚本,其实完全可以使用awk或者说是shell来执行

#!/usr/bin/perl -w # 表明这是一个perl脚本,-w表示打开警告
# 参考https://www.runoob.com/perl/perl-environment.htmluse strict;
# use strict表示使用严格模式,这样可以避免一些不规范的写法my ($blast_out) = @ARGV;
# 类似于shell脚本中 outputfile=$1这种写法
# 传给脚本的命令行参数列表,参考https://www.runoob.com/perl/perl-special-variables.html
# 变量定义使用my关键字,生命期直到其所在的代码块结束或者文件的末尾
# 从 @ARGV 数组中取出第一个元素,并将其赋给 $blast_out,与my $blast_out = @ARGV不同,后者会被赋予数组长度也就是元素数量
# 与my ($arg1, $arg2, $arg3) = @ARGV;写法区分my $usage = "This script is to get the best hit from blast output file with 1 input sequence.
usage: $0 <blast_output_file>
";
# 定义一个字符串变量,用于提示用户如何使用该脚本,$0表示脚本名称die $usage if @ARGV<1;
# 如果参数个数小于1,输出提示信息,注意die语句会立即终止脚本执行open(BLASTOUT,$blast_out)||die("open $blast_out error!\n");
# 打开blast输出文件,保存到文件句柄BLASTOUT中,如果打开失败,输出错误信息# 然后是初始化变量以存储
my $query = "";  # 查询序列的标识符
my $score = ""; # 最佳匹配的得分
my $p_value = ""; # 最佳匹配的P值
my $hit = "";   # 最佳匹配的标识符
my $flag = 0;   # 标志位,用于判断是否到了匹配结果的部分
while(<BLASTOUT>){# while循环读取文件句柄BLASTOUT中的每一行chomp;# chomp函数用于去掉字符串末尾的换行符if($flag == 0){if(/^Query=\s*(\w+)/){$query = $1;}# 匹配Query=开头的行,提取查询序列的标识符,保存到$query中# 其实就是捕获Query=开头的行中的除开空格部分的单词字符,第1个捕获组elsif(/^Sequences producing High-scoring Segment Pairs:/){$flag = 1;}# 匹配到Sequences producing High-scoring Segment Pairs:这一行,将标志位设为1else{next;}# FLAG=0的状态,就是寻找查询信息和匹配结果部分的标题# 如果不是上面两种情况,继续下一次循环,而一旦找到了匹配结果部分的标题,就将标志位设为1,跳出当前循环}else{if(/^([\w\.\-]+)\s+.+\s+([0-9]+)\s+([0-9e\-\.]+)\s+[0-9]+$/){$hit = $1;$score = $2;$p_value = $3;last;}else{next;}}# FLAG=1的状态,就是寻找匹配结果部分的每一行,其实就是匹配到了Sequences producing High-scoring Segment Pairs:这一行之后的部分# 匹配到了这一行,那就可以接着循环每一行,直到提取标识符,得分和P值,保存到$hit,$score,$p_value中# 如果没有匹配到,就继续下一次循环,因为flag没有改变,所以还是在匹配结果部分,也就是当前循环的目的
}close BLASTOUT;
# 关闭blast输出文件句柄BLASTOUTprint "Best hit to $query is: $hit, with score $score, P-value $p_value.\n";
# 最后,将最佳匹配的结果输出到屏幕exit;
# 脚本执行结束

二,使用ssearch

 /lustre/share/class/BIO8402/tools/fasta-36.2.6/bin/ssearch36 -q u1_human.fa /lustre/share/class/BIO8402/C.elegans/Proteome/ws_215.protein.fa > new.out

现在我们改一下工具,我们使用fasta也就是S-W经典算法中的工具实现ssearch,来进行序列比对,

然后同样要求使用perl脚本进行提取记录实现。

#!/usr/bin/perl -w use strict;my ($ssearch_out) = @ARGV;my $usage = "This script is to get the best hit from ssearch output file with 1 input sequence.
usage: $0 <ssearch_output_file>
";die $usage if @ARGV<1;open(SSEARCHOUT,$ssearch_out)||die("open $ssearch_out error!\n");my $query = "";  
my $s_w = "";
my $bits = "";	
my $e_value = ""; 
my $hit = "";	
my $flag = 0;	
while(<SSEARCHOUT>){chomp;if($flag == 0){if(/^Query:\s*(\w+)/){$query = $1;}# 匹配Query:开头的行,提取查询序列的标识符,保存到$query中# 其实就是捕获Query=开头的行中的除开空格部分的单词字符,第1个捕获组elsif(/^The best scores are:/){$flag = 1;}# 匹配到The best scores are:这一行,将标志位设为1else{next;}# FLAG=0的状态,就是寻找查询信息和匹配结果部分的标题# 如果不是上面两种情况,继续下一次循环,而一旦找到了匹配结果部分的标题,就将标志位设为1,跳出当前循环}else{if(/^([\w\.\-]+)\s+.+\s+([0-9]+)\s+([0-9\.]+)\s+([0-9e\-\.]+)+$/){$hit = $1;$s_w = $2;$bits = $3;$e_value = $4;last;}else{next;}}# FLAG=1的状态,就是寻找匹配结果部分的每一行,其实就是匹配到了The best scores are:这一行之后的部分# 匹配到了这一行,那就可以接着循环每一行,直到提取标识符,得分和e值,保存到对应变量中# 如果没有匹配到,就继续下一次循环,因为flag没有改变,所以还是在匹配结果部分,也就是当前循环的目的
}close SSEARCHOUT;
# 关闭blast输出文件句柄BLASTOUTprint "Best hit to $query is: $hit, with s-w $s_w, bites $bits, e-value $e_value.\n";
# 最后,将最佳匹配的结果输出到屏幕exit;

实际上就是这么一小条序列

使用 fasta 软件包中的 ssearch36 工具,将 u1_human.fa 文件中的蛋白质序列与 ws_215.protein.fa 文件中的蛋白质序列进行比对,并将比对结果保存到 ssearch.out 文件中;

我们得到的结果也只是针对这个蛋白的分析

按理来说得到的也应该是这个序列:也就是K08D10.3

修改部分其实很简单,就是文本处理,其使用三剑客awk、sed、grep写shell脚本就能处理;

除了我自己的主机,

在超算上同样执行成功:

——》其实最主要修改部分就是正则表达式那部分

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

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

相关文章

unity6 打包webgl注意事项

webgl使用资源需要异步加载 使用localization插件时要注意&#xff0c;webgl不支持WaitForCompletion&#xff0c;LocalizationSettings.InitializationOperation和LocalizationSettings.StringDatabase.GetTable都不能用 web里想要看到具体的报错信息调试开启这两个&#xf…

Three.js 入门(基础材质、贴图、纹理、环境、遮蔽光、透明度、高光贴图)

本篇主要学习内容 : three常用的几种材质环境贴图、贴图、环境光、遮蔽光、透明度、高光贴图&#xff08;纹理贴图&#xff09; 点赞 关注 收藏 学会了 1.three常用的几种材质 1.1&#xff09; 基础网格材质MeshBasicMaterial、漫反射网格材质MeshLambertMaterial、高光…

【大模型安全】大模型的技术风险

【大模型安全】大模型的技术风险 1.DDoS攻击2.常见的传统网络攻击方式3.恶意意图的识别4.AI生成虚假信息传播5.利用AI进行黑客攻击6.模型对抗攻击7.后门攻击8.Prompt攻击9.数据投毒攻击10.模型窃取攻击11.数据窃取攻击 1.DDoS攻击 2023年11月9日凌晨&#xff0c;OpenAI在官网公…

C++学习之路,从0到精通的征途:入门基础

目录 一.C的第一个程序 二.命名空间 1.namespace的价值 2.命名空间的定义 3.命名空间使用 三.C的输入与输出 1.<iostream> 2.流 3.std(standard) 四.缺省参数 1.缺省参数的定义 2.全缺省/半缺省 3.声明与定义 ​五.函数重载 1.参数个数不同 2.参数类型不…

本地YARN集群部署

请先完成HDFS的前置部署&#xff0c;部署方式可查看:本地部署HDFS集群https://blog.csdn.net/m0_73641796/article/details/145998092?spm1001.2014.3001.5502 部署说明 组件配置文件启动进程备注Hadoop HDFS需修改 需启动: NameNode作为主节点 DataNode作为从节点 Secondary…

UnrealEngine UE5 可视化 从地球观察火星 金星 土星 运动轨迹

视频参考&#xff1a;https://www.bilibili.com/video/BV1KpXSYdEdo/ 从地球观察土星的运动轨迹 从地球观察火星 轨迹 从地球观察金星的运动轨迹

通用信息抽取大模型PP-UIE开源发布,强化零样本学习与长文本抽取能力,全面适配多场景任务

背景与简介 信息抽取&#xff08;information extraction&#xff09;是指&#xff0c;从非结构化或半结构化数据&#xff08;如自然语言文本&#xff09;中自动识别、提取并组织出结构化信息。通常包含多个子任务&#xff0c;例如&#xff1a;命名实体识别&#xff08;NER&am…

Matlab实现车牌识别

车牌识别技术作为现代智能交通系统、安防监控以及诸多车辆管理应用场景中的关键环节&#xff0c;正发挥着日益重要的作用&#xff0c;它能够自动、快速且精准地从车辆图像或视频流中提取车牌信息&#xff0c;实现车辆身份的智能化识别。 技术原理 车牌识别主要依托于图像处理、…

基于Asp.net的零食购物商城网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

Ubuntu20.04双系统安装及软件安装(十一):向日葵远程软件

Ubuntu20.04双系统安装及软件安装&#xff08;十一&#xff09;&#xff1a;向日葵远程软件 打开向日葵远程官网&#xff0c;下载图形版本&#xff1a; 在下载目录下打开终端&#xff0c;执行&#xff1a; sudo dpkg -i SunloginClient(按tab键自动补全)出现报错&#xff1a; …

快速生成viso流程图图片形式

我们在写详细设计文档的过程中总会不可避免的涉及到时序图或者流程图的绘制&#xff0c;viso这个软件大部分技术人员都会使用&#xff0c;但是想要画的好看&#xff0c;画的科学还是比较难的&#xff0c;现在我总结一套比较好的方法可以生成好看科学的viso图(图片格式)。主要思…

C++设计一:日期类Date实现

一、引言与概述 1 引言 日期操作是软件开发中的常见需求&#xff0c;如日程管理、数据统计等场景均需处理日期的比较、偏移及合法性校验。为简化此类操作&#xff0c;本文设计了一个高效且类型安全的C日期类Date。 该类通过构造函数内嵌合法性检查&#xff0c;确保对象初始状…

【PAT (Basic Level) Practice】——【数论】1013 数素数

文章目录 一【题目难度】二【题目编号】三【题目描述】四【题目示例】五【解题思路】六【最终得分】七【代码实现】八【提交结果】 一【题目难度】 乙级 二【题目编号】 1013 数素数 三【题目描述】 令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104&#xff0c;请输出…

HCIA—IP路由静态

一、概念及作用 1、概念&#xff1a;IP路由是指在IP网络中&#xff0c;数据从源节点到目的节点所经过的路径选择和数据转发的过程。 2、作用 ①实现网络互联&#xff1a;使不同网段的设备能够相互通信&#xff0c;构建大规模的互联网络 ②优化网络拓扑&#xff1a;根据网络…

雷池WAF的为什么选择基于Docker

Docker 是一种开源的容器化平台&#xff0c;可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点&#xff1a; 容器&#xff1a;Docker 使用容器来封装应用程序及其依赖项&#xff0c;使其能够在任何环境中都能…

图像分类项目2:鸟类图像分类

1 数据集处理 1.1数据集下载 数据集来源&#xff1a;kaggle&#xff0c;网址&#xff1a;https://www.kaggle.com/&#xff0c;点击进入网站&#xff0c;左侧选择Datasets。 进入后搜索栏搜索关键词bird。此时出现很多数据集可以选择&#xff0c;推荐选择第一个或者第三个。…

利用opencv_python(pdf2image、poppler)将pdf每页转为图片

1、安装依赖pdf2image pip install pdf2image 运行.py报错&#xff0c;因为缺少了poppler支持。 2、安装pdf2image的依赖poppler 以上命令直接报错。 改为手工下载&#xff1a; github: Releases oschwartz10612/poppler-windows GitHub 百度网盘&#xff1a; 百度网盘…

IDEA入门及常用快捷键

IDEA是java常用的IDE。当run一个.java文件时&#xff0c;其实是经历了先编译为.class&#xff0c;再运行的过程。 在project文件夹中&#xff0c;out文件夹存储编译的.class文件&#xff0c;src文件夹存储.java代码文件。 设置自动导包 快捷键&#xff1a; 格式化快捷键&…

io学习----->文件io

思维导图&#xff1a; 一.文件io的概念 文件IO&#xff1a;指程序和文件系统之间的数据交互 特点&#xff1a; 1.不存在缓冲区&#xff0c;访问速度慢 2.不可以移植&#xff0c;依赖于操作系统 3.可以访问不同的文件类型(软连接&#xff0c;块设备等) 4.文件IO属于系统调…

深入探索WebGL:解锁网页3D图形的无限可能

深入探索WebGL&#xff1a;解锁网页3D图形的无限可能 引言 。WebGL&#xff0c;作为这一变革中的重要技术&#xff0c;正以其强大的功能和广泛的应用前景&#xff0c;吸引着越来越多的开发者和设计师的关注。本文将深入剖析WebGL的核心原理、关键技术、实践应用&#xff0c;并…