-
宏转录组学习笔记(三)
2020-03-28 15:53:30通过脚本和snakemake实现自动化 ...一个shell脚本是一个文本文件的完整的shell命令,运行时就如同你在命令行交互方式运行它们。 在这里,我们将创建一个从中获取并一次运行它们全部的命令。 编写shell脚本 让...通过脚本和snakemake实现自动化
到目前为止,我们已经完成了所有工作,并复制并粘贴了许多命令来完成所需的操作。这可行!但是也可能很耗时,并且更容易出错。接下来,我们将向你展示如何将所有这些命令放入Shell脚本中。
一个shell脚本是一个文本文件的完整的shell命令,运行时就如同你在命令行交互方式运行它们。
在这里,我们将创建一个从中获取并一次运行它们全部的命令。
编写shell脚本
让我们将质量控制过程中的所有命令放入一个脚本中。
我们称之为
run_qc.sh
。该sh
在的结尾告诉你,这是一个bash脚本。使用nano(编辑器)编辑文件
run-qc.sh
,并将以下内容放在其中:cd ${PROJECT} mkdir -p quality cd quality ln -s ../data/*.fq.gz ./ printf "I see $(ls -1 *.fq.gz | wc -l) files here.\n" fastqc *.fq.gz -t 4 multiqc .
现在,这是一个shell脚本,您可以使用一个命令来执行所有这些命令的去-试试跑下吧!:
cd ~/ bash run-qc.sh
重新运行shell脚本
假设您想重新运行脚本。你要怎么做?
好吧,请注意,
quality
目录是在脚本开始创建的,所有内容都在该目录中执行。因此,要像这样删除quality
目录,rm -fr quality
然后你可以运行
bash run-qc.sh
编写Shell脚本的一些技巧
1.使它可执行
您可以
bash
通过一些magic来摆脱上面的命令部分:把
#! /bin/bash
放在文件顶部,然后运行
chmod +x ~/run-qc.sh
您现在可以运行
./run-qc.sh
代替
bash run-rnaseq.sh
。您可能会想,好吧,为什么这很重要?好的,您可以对R脚本和Python脚本执行相同的操作(但是放在
/usr/bin/env Rscript
或/usr/bin/env python
放在顶部,而不是/bin/bash
)。这基本上用脚本的编写语言来注释脚本,因此您不必自己了解或记住。所以:这不是必须的,但这是一个很好的技巧。
您也可以始终通过指定或来强制脚本以特定语言运行。
bash ``Rscript
2.另一个很好的补充:使它很好地报错
Shell脚本的一个怪异的方面是(默认情况下)即使有错误,它们也可以继续运行。这是不好的行为,我们应该将其关闭。
您可以通过重新运行上面的脚本而不删除目录来观察此行为
rnaseq/
-该mkdir
命令将打印错误,因为目录仍然存在,但是每个shell脚本的一个很好的补充就是使它在第一个错误时失败。通过放set -e
在顶部-告诉bash在第一个错误时退出,而不是勇敢地继续前进。
3.最后一个不错的补充:使shell脚本打印出它们正在运行的命令!
你可能会注意到,shell脚本为您提供了它的运行命令的输出,但不告诉你它的运行命令。
如果添加
set -x
在Shell脚本的顶部,然后重新运行它,
cd ~/ rm -fr quality ./run-qc.sh
然后您将看到正在运行的全部命令!
关于shell脚本的最后说明:
set -e
并且set -x
仅在shell脚本中起作用-它们是bash命令。您需要在Python和R中使用其他方法。Snakemake自动化!
通过shell脚本实现自动化非常棒,但是这里存在一些问题。
首先,您必须每次都运行整个工作流程,并且每次都要重新计算所有内容。如果您运行的工作流需要4天,并且在最后更改了命令,则必须手动进入,然后运行依赖于已更改命令的内容。
其次,它是非常明确的,并且不是很通用。如果要在其他RNAseq数据集上运行,则必须更改许多命令。
snakemake是帮助解决这些问题的几种工作流程系统之一。(您可以在此处阅读文档。)让我们看一下!
首先,让我们激活我们的snakemake环境
source deactivate source activate snake
我们将自动化相同的脚本进行修剪,但是使用snakemake。
rule all: input: "trim/TARA_135_SRF_5-20_rep1_1m_1.qc.fq.gz", "trim/TARA_135_SRF_5-20_rep1_1m_2.qc.fq.gz" rule trim_reads: input: r1="data/TARA_135_SRF_5-20_rep1_1m_1.fq.gz", r2="data/TARA_135_SRF_5-20_rep1_1m_2.fq.gz", adapters="trim/combined.fa" ouput: p1="trim/TARA_135_SRF_5-20_rep1_1m_1.qc.fq.gz", p2="trim/TARA_135_SRF_5-20_rep1_1m_2.qc.fq.gz", s1="trim/TARA_135_SRF_5-20_rep1_1m_1_s1.qc.fq.gz", s2="trim/TARA_135_SRF_5-20_rep1_1m_2_s2.qc.fq.gz" shell:''' trimmomatic PE {input.r1} \ {input.r2} \ {output.p1} {output.s1} \ {output.p2} {output.s2} \ ILLUMINACLIP:{input.adapters}:2:40:15 \ LEADING:2 TRAILING:2 \ SLIDINGWINDOW:4:2 \ MINLEN:25 '''
现在我们可以运行
cd $PROJECT snakemake
您应该看到“什么都没做”。
那是因为修剪的文件已经存在!
让我们修复一下:
rm trim/TARA_135_SRF_5-20_rep1*
现在,当您运行时
snakemake
,您应该看到正在运行Trimmomatic。是的!然后,如果snakemake
再次运行,您将发现它不需要执行任何操作-所有文件都是“最新的”。添加环境
在整个研讨会中,我们一直在使用conda环境。我们展示了您必须使用来在Bioconda课程中导出塔拉环境
conda env export -n tara -f $PROJECT/tara_conda_environment.yaml
。我们也可以在snakemake规则中使用此环境!rule all: input: "trim/TARA_135_SRF_5-20_rep1_1m_1.qc.fq.gz", "trim/TARA_135_SRF_5-20_rep1_1m_2.qc.fq.gz" rule trim_reads: input: r1="data/TARA_135_SRF_5-20_rep1_1m_1.fq.gz", r2="data/TARA_135_SRF_5-20_rep1_1m_2.fq.gz", adapters="trim/combined.fa" ouput: p1="trim/TARA_135_SRF_5-20_rep1_1m_1.qc.fq.gz", p2="trim/TARA_135_SRF_5-20_rep1_1m_2.qc.fq.gz", s1="trim/TARA_135_SRF_5-20_rep1_1m_1_s1.qc.fq.gz", s2="trim/TARA_135_SRF_5-20_rep1_1m_2_s2.qc.fq.gz" conda: "tara_conda_environment.yaml" shell:''' trimmomatic PE {input.r1} \ {input.r2} \ {output.p1} {output.s1} \ {output.p2} {output.s2} \ ILLUMINACLIP:{input.adapters}:2:40:15 \ LEADING:2 TRAILING:2 \ SLIDINGWINDOW:4:2 \ MINLEN:25 '''
我们现在不打算在集群上运行它,因为它要求您能够下载内容,而我们不能执行此操作。但是,这是将来执行此操作的语法。
其他资源
今天,我们已经介绍了
snakemake
的一些基础知识,但是,如果您需要其他教程,可以在这里添加一个。 -
宏命令 简介
2020-12-15 11:55:57宏命令是一组命令的集合,通过执行宏命令的方式,可以一次执行一批命令。 1、逐步创建一个宏命令 var closeDoorCommand = { execute: function () { console.log('关门') } } var oepnPcCommand = { ...宏命令是一组命令的集合,通过执行宏命令的方式,可以一次执行一批命令。
1、逐步创建一个宏命令
var closeDoorCommand = { execute: function () { console.log('关门') } } var oepnPcCommand = { execute: function () { console.log('开电脑') } } var openQQCommand = { execute: function() { console.log('登录QQ') } }
2、定义宏命令,add方法将宏命令添加进队列,execute方法为依次执行宏命令
var MacroCommand = function() { return { commandsList: [], add: function(command) { this.commandsList.push(command) }, execute: function() { for (var i = 0, command; command = this.commandsList[i++];) { command.execute() } } } } var macroCommand = MacroCommand() macroCommand.add( closeDoorCommand ) macroCommand.add( oepnPcCommand ) macroCommand.add( openQQCommand ) macroCommand.execute()
结果展示:
宏命令是命令模式和组合模式的联合产物。
-
Javascript 设计模式(5-2) —— 宏命令
2019-07-16 14:22:44宏命令是一组命令的集合,通过执行宏命令的方式,可以一次执行一批命令。 下面我们看看如何逐步创建一个宏命令。首先,我们依然要创建好各种 Command: 第一步 :定义好各种命令 var closeDoorCommand = { ...宏命令是一组命令的集合,通过执行宏命令的方式,可以一次执行一批命令。
下面我们看看如何逐步创建一个宏命令。首先,我们依然要创建好各种 Command:
第一步 :定义好各种命令var closeDoorCommand = { execute: function(){ console.log( '关门' ); } }; var openQQCommand = { execute: function(){ console.log('打开QQ') } } var openPcCommand = { execute: function(){ console.log( '开电脑' ); } };
第二步 :定义宏命令 MacroCommand
macroCommand.add 方法表示把子命令添 加进宏命令对象,当调用宏命令对象的 execute 方法时,会迭代这一组子命令对象,并且依次执 行它们的 execute 方法:var MacroCommand = function(){ return { commandList : [] , add : function( command ){ this.commandList.push( command );//把命令添加至数组中 }, //撤销命令 undo:function(command){ this.commandsList.pop( command ); }, execute : function(){ for(var i = 0 ,command;command = this.commandList[i++]){ command.execute(); //一次执行execute } } } } var macroCommand = MacroCommand(); //定义
第三步 :添加命令
macroCommand.add( closeDoorCommand ); macroCommand.add( openQQCommand ); macroCommand.add( openPcCommand );
第四步 : 执行命令
macroCommand.execute();
宏命令是命令模式与组合模式的联用产物
-
让Excel工作簿中宏自动运行的两种方法
2017-04-05 10:27:29在Excel工作簿中创建宏后,有时用户需要宏能够随着工作表的打开自动运行。要实现这种宏的自动运行可以使用Auto_Open过程启动和事件启动这两种方式,本文分别介绍让Excel工作簿中宏自动运行的两种方法。 1、启动...在Excel工作簿中创建宏后,有时用户需要宏能够随着工作表的打开自动运行。要实现这种宏的自动运行可以使用Auto_Open过程启动和事件启动这两种方式,本文分别介绍让Excel工作簿中宏自动运行的两种方法。
1、启动Excel并打开包含宏的工作表,在“开发工具”选项卡的“代码”组中单击“宏”按钮打开“宏”对话框,单击“编辑”按钮打开VBA编辑器窗口,如图1所示。在代码窗口中将原有的过程名更改为"Auto_Open",如图2所示。切换到Excel窗口,再次打开“宏”对话框,可以看到宏的名称已经改变,如图3所示。保存该文档,当再次打开该文档时,宏将自动运行。
图1 单击“编辑”按钮
图2 修改过程名
图3 宏名称发生改变
2、在“开发工具”选项卡的“代码”组中单击"Visual Basic"按钮打开VBA编辑器,在工程资源管理器窗口中双击"Sheet1(Sheet1)"选项,如图4所示。在打开的代码窗口的“对象”下拉列表中选择"Worksheet"选项,在“事件”下拉列表中选择"Activate"选项,在Activate事件代码中添加宏过程名,如图5所示。保存文档,这样当工作表被激活时宏将自动执行。
图4 双击
图5 选择对象和事件并输入代码
提示
Auto_Open过程是一个特殊的自定义Sub过程,其包含的代码可以在工作簿打开时自动执行,宏过程写入其中当然也将被自动调用执行。Worksheet对象的Activate事件是在工作表被激活时触发,在该事件代码中调用宏过程将使工作表被激活时宏被启用。
-
第十二周总结Access
2018-05-26 17:58:00一、学到了什么? 宏 ...2、创建宏,在课堂上老师先说了如何创建宏,也让我们创建了宏的操作。 二、有哪些心得? 三、有哪些疑惑? 转载于:https://www.cnblogs.com/a-9-9-n/p/9093793.h... -
FlowCanvas官方文档翻译(三)
2017-02-17 14:16:005.Macros 宏 宏是一组复合到一个可重用的流程脚本中的节点,可以在任何其他流程脚本中作为一个整体使用......创建宏可以通过两种方式完成。 通过“添加节点”上下文菜单和“MACROS /创建新...”选项,或... -
指向函数的指针数组
2016-01-08 11:53:47创建指向函数的指针数组,为了选择一个函数,只需使用数组的下标。然后间接引用这个指针。这种方式支持表格式驱动码(table-driven code)的概念;...下面的例子使用预处理宏创建了一些哑函数,然后使用自动集合初始 -
Cocos2dx 3.0 过渡篇(十五)帧动画的存储播放
2014-03-05 19:29:23本篇是action三板斧的最后一板,经过深思熟虑后,我决定就用正常人的方式写吧... 这次主要介绍动画的创建即存储,要实现的功能有: 1、创建四组动画,并存放至Array中; 2、创建四个虚拟方向按钮,控制精灵移动与... -
键盘自动按键工具(Perfect Keyboard Pro 9)pjb v9.2.0
2020-10-07 17:27:00同时该软件还允许用户创建或使用多个宏文件,这些宏文件在主窗口中表示为选项卡,每个宏文件中的宏都组织在具有树结构的宏组中,且一个宏组包含多个宏。另外,Perfect Keyboard Pro 9还提供了键盘属性、运行宏、创建... -
excel的使用
2012-11-25 17:06:01首先打开“工具”菜单,单击“宏”命令中的“Visual Basic编辑器”,进入Visual Basic编辑环境,在“工程-VBAobject”栏中的当前表上单击鼠标右键,选择“插入”-“模块”,在右边栏创建下面的函数rrr,代码如下: ... -
Visual C++范例大全 400+的实例源码
2010-04-01 21:30:54实例057——创建带有复选框的列表框和可拖放列表项的列表框 实例058——实现选中项缩进的列表框 实例059——创建带有智能水平滚动条的列表框 实例060——添加和获取组合框的列表项 实例061——使用扩展组合框使... -
你必须知道的495个C语言问题
2015-10-16 14:14:285.12 我用预处理宏#defineNullptr(type)(type*)0帮助创建正确类型的空指针。 回顾 59 5.13 这有点奇怪:NULL可以确保是0,但空(null)指针却不一定? 5.14 为什么有那么多关于空指针的疑惑?为什么这些问题如此... -
你必须知道的495个C语言问题(中文高清版)
2013-03-20 13:28:285.12 我用预处理宏#defineNullptr(type)(type*)0帮助创建正确类型的空指针。 回顾 59 5.13 这有点奇怪:NULL可以确保是0,但空(null)指针却不一定? 5.14 为什么有那么多关于空指针的疑惑?为什么这些问题... -
[你必须知道的495个C语言问题]人民邮电出版社
2012-08-18 19:02:285.12 我用预处理宏#defineNullptr(type)(type*)0帮助创建正确类型的空指针。 回顾 59 5.13 这有点奇怪:NULL可以确保是0,但空(null)指针却不一定? 5.14 为什么有那么多关于空指针的疑惑?为什么这些问题... -
你必须知道的495个C语言问题.[美]Steve Summit(带详细书签).pdf 压缩版
2018-04-08 02:26:505.12 我用预处理宏#define Nullptr(type)(type *)0帮助创建正确类型的空指针。 88 回顾 88 5.13 这有点奇怪:NULL可以确保是0,但空(null)指针却不一定? 88 5.14 为什么有那么多关于空指针的疑惑?为什么这些... -
重楼《辅_助是如何炼成的》游戏辅助原版视频+工具.txt
2020-07-28 16:45:16课程内容: 利用 明文包CALL和 目标ID找到游戏普通攻击功能,并分析封包组的汇编代码. 007 - VC++创建工程以及简单的函数 课程内容: 创建一个空白的工程,并开始写第一个简单函数 008 -函数的机制之栈帧的形成 课程... -
《你必须知道的495个C语言问题》
2010-03-20 16:41:185.12 我用预处理宏#define Nullptr(type)(type *)0帮助创建正确类型的空指针。 59 回顾 59 5.13 这有点奇怪:NULL可以确保是0,但空(null)指针却不一定? 59 5.14 为什么有那么多关于空指针的疑惑?为什么... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:095.12 我用预处理宏#define Nullptr(type)(type *)0帮助创建正确类型的空指针。 59 回顾 59 5.13 这有点奇怪:NULL可以确保是0,但空(null)指针却不一定? 59 5.14 为什么有那么多关于空指针的疑惑?为什么... -
C语言:数组基本知识&&冒泡排序
2019-11-13 10:53:35数组是一组相同类型元素的集合 创建数组:类型 + 数组名 + [数组的大小];[]里面只能放字面常量,或宏定义的常规的常量 ...数组赋值:不能被整体赋值,可以通过循环的方式赋值; 具体如下例子: ... -
IOS开发学习笔记Day3-OC基础三
2019-04-22 11:23:45OC基础三NSArray常用方法数组的遍历数组的排序array和String之间的转换将数组写入到文件中NSMutableArray(可变数组)NSDictionary(字典)可变字典常用的结构体NSNumberNSValueNSDateNSCalendarNSFileManager对象的... -
热键脚本语言(AutoHotkey) v1.1.29.00 官方版.rar
2019-07-09 20:44:33例如,键入“BTW”可以自动产生“的方式。” 创建自定义数据录入表格,用户界面和菜单栏。见GUI详情。 重映射你的键盘,游戏杆和鼠标上的按键和按钮。 响应信号从手持遥控器通过WinLIRC的客户端脚本。 运行现有... -
你必须知道的495个C语言问题.pdf
2013-01-20 14:30:545.12 我用预处理宏#define Nullptr(type)(type *)0帮助创建正确类型的空指针。 回顾 5.13 这有点奇怪:NULL可以确保是0,但空(null)指针却不一定? 5.14 为什么有那么多关于空指针的疑惑?为什么这些问题如此频繁地... -
mdb数据库编辑器Access2003.rar
2019-09-02 15:22:29软件介绍: Access2003是微软的数据库编辑和查看工具,它可以打开mdb格式的数据库文件,即可以...支持宏,内置visual basic编辑器及脚本编辑器,可使用将宏转换为vb代码,支持宏创建菜单及工具栏、创建快捷菜单。 -
[你必须知道的495个C语言问题]人民邮电出版社.扫描版.pdf
2011-10-01 21:39:525.12 我用预处理宏#define Nullptr(type)(type *)0帮助创建正确类型的空指针。 回顾 5.13 这有点奇怪:NULL可以确保是0,但空(null)指针却不一定? 5.14 为什么有那么多关于空指针的疑惑?为什么这些问题如此频繁地... -
语音识别的MATLAB实现
2009-03-03 21:39:18声控小车是科大华为科技制作竞赛命题组的项目,其要求是编写一个语言识别程序并适当改装一个小型机动车,使之在一个预先不知道具体形状的跑道上完全由声控来完成行驶比赛。跑道上可以有坡面,坑, 障碍等多种不利... -
EXCEL 2007 宝典 附光盘文件
2010-04-02 14:43:05mortgage loan data table.xlsx:一个演示如何创建一种方式的假设分析数据表的工作簿。 mortgage loan.xlsx:一个使用输入单元格和公式单元格演示假设分析过程的工作簿。 production model.xlsx:一个演示方案管理... -
AutoHotkey(热键脚本语言) v1.1.30.00 免费版.zip
2019-07-14 18:55:17例如,键入“BTW”可以自动产生“的方式。” 创建自定义数据录入表格,用户界面和菜单栏。见GUI详情。 重映射你的键盘,游戏杆和鼠标上的按键和按钮。 响应信号从手持遥控器通过WinLIRC的客户端脚本。 运行现有... -
Access+2000中文版高级编程
2012-02-05 09:20:258.7.3 用组的嵌套彻底解决问题 217 8.7.4 区分新旧记录 217 8.7.5 在交叉表查询中使用“总计”行 220 8.8 查询过程的结构 224 8.8.1 定义查询 224 8.8.2 编译 224 8.8.3 准备执行计划(优化) 225 8.9...
-
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
e_timer_Timer和TimerTask_20210225
-
Go-SpeedTest-Bot:帮助您使用手机管理所有节点的机器人-源码
-
电商PC前后端分离项目Spring Boot后台实战第一期
-
*区间(dp)
-
Jenkins软件开发持续集成及自动构建
-
leetcode算法第三题
-
linux基础入门和项目实战部署系列课程
-
illustrator软件Mac电脑入门学习必备
-
Golang零基础-->高级编程
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
2019年上半年 网络工程师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
元素周期表-three.js实战详解
-
用nodejs抓取-源码
-
2011年上半年 信息系统管理工程师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
2016年下半年 信息系统监理师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
2013年下半年 信息系统监理师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
易意-源码
-
在 Linux 上构建企业级 DNS 域名解析服务
-
ELF视频教程