<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>生信菜鸟团 &#187; linux</title>
	<atom:link href="http://www.bio-info-trainee.com/category/%e8%ae%a1%e7%ae%97%e6%9c%ba%e5%9f%ba%e7%a1%80/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bio-info-trainee.com</link>
	<description>欢迎去论坛biotrainee.com留言参与讨论，或者关注同名微信公众号biotrainee</description>
	<lastBuildDate>Sat, 28 Jun 2025 14:30:13 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.33</generator>
	<item>
		<title>linux服务器管理&#8211;防火墙设置命令iptables</title>
		<link>http://www.bio-info-trainee.com/1688.html</link>
		<comments>http://www.bio-info-trainee.com/1688.html#comments</comments>
		<pubDate>Sat, 04 Jun 2016 01:32:07 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[生信基础]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[端口]]></category>
		<category><![CDATA[防火墙]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=1688</guid>
		<description><![CDATA[如果我们想新开一个端口给别人访问，我们就需要设置防火墙，比如我想开3838端口给 &#8230; <a href="http://www.bio-info-trainee.com/1688.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div>
<div>如果我们想新开一个端口给别人访问，我们就需要设置防火墙，<strong>比如我想开3838端口给shiny程序使用</strong>，下面我重点讲解这个实例，其余开放端口，关闭端口大家继续学习就好。</div>
<div>如果你使用的是ssh远程，而又不能直接操作本机，<span style="color: #ff00ff;"><strong>那么建议你慎重，慎重，再慎重！（一旦你把22端口给搞死了，你就无法登陆你的服务器了！！！）</strong></span></div>
<div><span id="more-1688"></span></div>
<div>通过iptables我们可以为我们的Linux服务器配置有动态的防火墙，能够指定并记住为发送或接收信息包所建立的连接的状态，是一套用来设置、维护和检查Linux内核的IP包过滤规则的命令包。</div>
<div>首先配置好防火墙 <b>sudo vim<span style="color: #ff0000;"> /etc/sysconfig/iptables </span></b>让该端口可以被访问</div>
<div><a href="http://www.bio-info-trainee.com/wp-content/uploads/2016/06/3.png"><img class="alignnone size-full wp-image-1680" src="http://www.bio-info-trainee.com/wp-content/uploads/2016/06/3.png" alt="3" width="593" height="264" /></a></div>
<div>然后进去修改即可，上面红圈出来的那句话就是我添加的，意思是开放3838端口给用户使用。</div>
<div>修改之后并不是防火墙规则马上生效，还需要一个步骤，我搜索了一些资料，里面是这样讲的，我发现它的教程太旧了</div>
<blockquote>
<div>这里很多人会想到/etc/rc.d/init.d/iptables save指令</div>
<div>但是一旦你这么干了你刚才的修改内容就白做了。。。</div>
<div>只修改/etc/sysconfig/iptables 使其生效的办法是修改好后先service iptables restart</div>
<div>然后才调用/etc/rc.d/init.d/iptables save</div>
<div>因为/etc/rc.d/init.d/iptables save会在iptables服务启动时重新加载，要是在重启之前直接先调用了/etc/rc.d/init.d/iptables save那么你的/etc/sysconfig/iptables 配置就回滚到上次启动服务的配置了，这点必须注意！！！</div>
</blockquote>
<p>因为我是新的系统（RedHat 7, Ubuntu 15.04+, SLES 12+) ，结合我对该教程的理解。所以我用的是</p>
</div>
<p>&nbsp;</p>
<div>sudo systemctl restart iptables  命令，果然，马上3838端口就可以被访问了，我的shiny程序也可以完整的使用啦。</div>
<div>再简单解释一下刚才修改的<strong>防火墙配置文件</strong><b><span style="color: #ff0000;"> /etc/sysconfig/iptables</span></b> 的那句话的意义：</div>
<blockquote>
<div>
<ol>
<li>-A：指定链名</li>
<li>-p：指定协议类型</li>
<li>-d：指定目标地址</li>
<li>--dport：指定目标端口（destination port 目的端口）</li>
<li>--sport：指定源端口（source port 源端口）</li>
<li>-j：指定动作类型</li>
</ol>
</div>
</blockquote>
<div>我还查了好多其它资料，开始好像暂时用不着，就先不学习了，但是那些资料大多太陈旧了，请睁大你的慧眼，消化了它人的指导，再来自己运行。</div>
<div></div>
<div></div>
<div></div>
<div>
<div>也可以不去打开那个文件进行修改，而且命令行形式一条条记录的添加</div>
<div>
<blockquote>
<div>
<ol>
<li>例如我给SSH加放行的语句：</li>
<li>添加input记录： iptables -A INPUT -p tcp --dport <span style="color: #c00000;">22</span> -j ACCEPT</li>
<li>添加output记录： iptables -A OUTPUT -p tcp --sport <span style="color: #c00000;">22</span> -j ACCEPT</li>
<li>最后注意需要再执行一下 /etc/init.d/iptables save，这样这两条语句就保存到刚才那个/etc/sysconfig/iptables 文件中了。</li>
</ol>
</div>
</blockquote>
</div>
<div></div>
<div></div>
<div>删除端口就非常简单了：</div>
<div>可能有时候需要删除规则，最简单就是修改一下/etc/sysconfig/iptables然后service iptables restart,最后/etc/rc.d/init.d/iptables save即可。</div>
<div></div>
<div>还可以彻底禁止某IP访问:</div>
<div>
<ol>
<li>#屏蔽单个IP的命令是</li>
<li>iptables -I INPUT -s 123.45.6.7 -j DROP</li>
<li>#封整个段即从123.0.0.1到123.255.255.254的命令</li>
<li>iptables -I INPUT -s 123.0.0.0/8 -j DROP</li>
<li>#封IP段即从123.45.0.1到123.45.255.254的命令</li>
<li>iptables -I INPUT -s 124.45.0.0/16 -j DROP</li>
<li>#封IP段即从123.45.6.1到123.45.6.254的命令是</li>
<li>iptables -I INPUT -s 123.45.6.0/24 -j DROP</li>
<li>指令I是insert指令 但是该指令会insert在正确位置并不像A指令看你自己的排序位置，因此用屏蔽因为必须在一开始就要加 载屏蔽IP，所以必须使用I命令加载，然后注意执行/etc/rc.d/init.d/iptables save进行保存后重启服务即可</li>
</ol>
</div>
<div></div>
<div>在linux关闭防火墙可以这样：<br />
1. 重启系统生效<br />
开启： chkconfig iptables on<br />
关闭： chkconfig iptables off2. 即时生效，重启后失效<br />
开启： service iptables start<br />
关闭： service iptables stop</div>
</div>
<div></div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/1688.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux服务器管理&#8211;系统服务设置命令systemctl</title>
		<link>http://www.bio-info-trainee.com/1685.html</link>
		<comments>http://www.bio-info-trainee.com/1685.html#comments</comments>
		<pubDate>Sat, 04 Jun 2016 01:22:48 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[生信基础]]></category>
		<category><![CDATA[chkconfig]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[systemctl]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=1685</guid>
		<description><![CDATA[因为买过一个超算云服务器，所以前面我讲过Ubuntu服务器管理系列知识，正好最近 &#8230; <a href="http://www.bio-info-trainee.com/1685.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>因为买过一个超算云服务器，所以前面我讲过<a href="http://www.bio-info-trainee.com/577.html">Ubuntu服务器管理系列知识</a>，正好最近要搞了个阿里云，用来做shiny服务器，发现服务器管理居然进化了好多，以前的知识都过时了，再记录一笔吧，真的是学习如逆水行舟，不进则退呀！</p>
<p>我的阿里云服务器版本是CentOS 6.5.，属于（RedHat 7, Ubuntu 15.04+, SLES 12+)  系列，是目前最新版本的服务器管理，所以大家重点是记住这个<span style="color: #ff00ff;"><strong>systemctl </strong></span>即可：</p>
<p><span id="more-1685"></span></p>
<blockquote>
<div>例子如下：</div>
</blockquote>
<div>
<blockquote>
<div><span style="color: #ff00ff;"><strong>sudo systemctl start shiny-server</strong></span></div>
<div><span style="color: #ff00ff;"><strong>sudo systemctl stop shiny-server</strong></span></div>
<div><span style="color: #ff00ff;"><strong>sudo systemctl restart shiny-server</strong></span></div>
</blockquote>
<div>
<blockquote>
<div>如果是稍微有点旧的(Ubuntu 12.04 through 14.10 and RedHat 6)</div>
<div>例子如下：</div>
<div>
<ul>
<li><span style="color: #ff00ff;"><strong>启动指令:sudo service iptables start   </strong></span></li>
<li><span style="color: #ff00ff;"><strong>重启指令:sudo service iptables restart   </strong></span></li>
<li><span style="color: #ff00ff;"><strong>关闭指令:sudo service iptables stop   </strong></span></li>
</ul>
</div>
<div>如果是特别老的linux服务器，如(RedHat 5, SLES 11) ，系统太老了，关键文件存放在<code>/etc/init.d/</code></div>
<div>sudo /sbin/service shiny-server start</div>
<div>sudo /sbin/service shiny-server stop</div>
<div>sudo /sbin/service shiny-server restart</div>
<div>sudo /sbin/service shiny-server reload</div>
<div>sudo /sbin/service shiny-server status</div>
</blockquote>
</div>
</div>
<p>总结一下就是，最新的系统用的是systemctl， 是一种管制服务的主要工具， 它整合了chkconfig 与 service功能于一体。如果你查看很多教程里面提到了chkconfig 与 service，你尽管用这个systemctl替代就好了</p>
<p>systemctl is-enabled iptables.service<br />
systemctl is-enabled servicename.service #查询服务是否开机启动<br />
systemctl enable *.service #开机运行服务<br />
systemctl disable *.service #取消开机运行<br />
<b>systemctl start *.service #启动服务<br />
systemctl stop *.service #停止服务<br />
systemctl restart *.service #重启服务</b><br />
systemctl reload *.service #重新加载服务配置文件<br />
systemctl status *.service #查询服务运行状态<br />
systemctl --failed #显示启动失败的服务</p>
<p>注：*代表某个服务的名字，如http的服务名为httpd</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/1685.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>生信分析人员数据处理脚本实战</title>
		<link>http://www.bio-info-trainee.com/1670.html</link>
		<comments>http://www.bio-info-trainee.com/1670.html#comments</comments>
		<pubDate>Wed, 01 Jun 2016 01:06:12 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[脚本]]></category>
		<category><![CDATA[自学]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=1670</guid>
		<description><![CDATA[我前面写到了生信分析人员如何入门linux和perl，后面还会写R和python &#8230; <a href="http://www.bio-info-trainee.com/1670.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>我前面写到了生信分析人员如何入门linux和perl，后面还会写R和python的总结，但是在这中间我想插入一个脚本实战指南。其实在我前两篇日志里面也重点提到了学习编程语言最重要的就是实战了，也点出了几个关键词。在实际生物信息学数据处理中应用perl和linux，可以借鉴<strong>EMBOSS</strong>软件套件，<strong>fastx-toolkit</strong>等基础软件，实现并且模仿该软件的功能。尤其是<strong>SMS2/exonerate/</strong>里面的一些常见功能,还有<strong>DNA2.0 Bioinformatics Toolbox</strong>的一些工具。如果你这些名词不懂，请赶快谷歌！！！ 它们做了什么，输入文件是什么，输出文件是什么，你都可以用脚本实现！</p>
<p><span id="more-1670"></span></p>
<p>你在实现这些功能的时候就必然会融会贯通变量，控制语句，操作符，文件读写等基本编程功能，还会熟悉生物信息学常见数据格式，数据背后的生物学意义。用什么语言都是一样的，千万不要落入语言之争的下乘，也不要纠结于细节。学习是长期过程，尤其是编程这种事情就跟以前的木匠瓦匠一样，是人生技能，跟游戏不一样，不是一时半会就通过了。</p>
<p>如果你英文还不错，推荐看英文的资料，比如下面的<strong>DNA2.0 Bioinformatics Toolbox</strong>，就可以浏览该网站做了什么，然后自己把同样的文件，对该文件也进行类似的处理。</p>
<p><a href="http://www.bio-info-trainee.com/wp-content/uploads/2016/06/DNA2.0-Bioinformatics-Toolbox.png"><img class="alignnone size-full wp-image-1671" src="http://www.bio-info-trainee.com/wp-content/uploads/2016/06/DNA2.0-Bioinformatics-Toolbox.png" alt="DNA2.0 Bioinformatics Toolbox" width="817" height="630" /></a></p>
<p>如果你还是比较熟悉中文，在这里推荐CJ大神总结的一些实际需求，下面都是一些随用随写的脚本，大神都是一句话就搞定了，但是对新手来说，请按部就班的练习！</p>
<blockquote>
<div>-1.查看fastq文件读段平均读长、最大读长、最短读长<br />
0.perl命令行粗暴多文件并行处理（每个线程处理一个文件）<br />
1.从fasta文件中提取特定的某个序列(记录)<br />
2.从fasta文件中批量提取序列(记录)<br />
3.Fastq格式转换为fasta格式<br />
4.常规fasta文件去格式为一行id一行seq<br />
5.快速批量提取读段文件的指定序列 (也可用于去格式的fasta文件)<br />
6.读段个数统计<br />
7.fastq质量值格式转换---用于将phred+64数据转为phred+33数据<br />
8.fastq 5'端trimming<br />
9.去除低质量值碱基数量高于N个的reads--用于phred+33数据<br />
10.去除读段序列含未知碱基N超过一定比例的读段<br />
11. 切除读段两端质量值低于给定阈值的部分并丢弃长度低于给定值的记录 新增双端版本 20140831<br />
12.去除低质量值碱基(Q&lt;给定值)所在比例高于(P大于给定值)的读段---用于phred+33数据<br />
13.DNA序列转mRNA序列<br />
14.perl脚本windows和linux间切换<br />
15.window下打印前10行 或者 打印后10行<br />
16.生成批处理用的无后缀file_list<br />
17.fastq中提取特征读段序列<br />
18.fasta格式CDS转为aa（必须有终止密码子）<br />
19.window下面模拟cut命令-提取文本第二列<br />
20.window下合并多个fa文件<br />
21.window下提取匹配到某一模体的fasta序列<br />
22.提取人类基因组注释文件rRNA注释<br />
23.对sort | uniq -c | 的结果频次由高到低排序，有大用<br />
24.fasta格式的DNA序列反向互补<br />
25.一行id一行序列的fa文件格式化为一行id多行序列<br />
26.按fastq文件标签名对读段顺序进行排序---待优化版<br />
27. 替换fq或fa文件记录的id为指定形式<br />
28.提供一个序列名列表逐一替换fasta记录的id</div>
<div>29.根据NCBI gene id 即gi号获取GeneBank上的序列<br />
30.根据蛋白gene_id或accession获取其Genebank上的核苷酸序列<br />
31.比较字符串中两个单字符的频次(比如投票0,1或方向F,R)<br />
32.有同学想知道比对上的读段在genome上正反链的分布情况<br />
33.去除全读段所有碱基质量值均低于某个阈值（如20）的读段(支持单端和双端数据)<br />
34.借用pileup文件直接统计测序数据在各染色体上的分布<br />
35.查看sam中uniq mapped比率<br />
36.查看sam中编辑距离分布<br />
37.统计各行平均值或各列平均值<br />
38.将fa文件(尤其基因组文件)分成每个记录一个文件(要求一行id一行seq,见25)<br />
39.批量重命名<br />
40.win下批量去除文件夹内所有文件中的数字<br />
41.统计SAM文件某一标签(BWA结果)<br />
42.提取长度大于1000bp的fa记录<br />
43.批量提取匹配行（正则匹配，强大） ---稍修改即可用于各类模式匹配批量提取，非常强大<br />
44. fasta中有相同id，增加后缀方便blast建库<br />
45. 多个列表文件，比如gene_ids，取样品特异gene_id<br />
46. 直接统计一个序列的GC含量<br />
47. 直接连接几个序列并将小写转换成大写<br />
48. 序列贪吃蛇<br />
49. 随机提取一定比例的fasta 记录或者fastq记录<br />
50. 单行记录随机分组<br />
51. 按照fasta长度排序fasta文件，修改后也可以用于具有某类特征标记的记录排序 (用于大文件，小文件请直接用hash)<br />
52. 双标签区段提取 (使用范围操作符..)<br />
53. 批量从uniprot上下载序列<br />
54. 准备trimmomatic所需的adapter.fa文件<br />
55. 提取fasta文件特定记录的特定区段<br />
56. 获取GO term Level 2的信息<br />
57. 单标签语句块读取 --（方便解析任何行组织文本-fasta fastq blast...）<br />
58. 核酸序列互补配对的子函数<br />
59. 分隔fa文件 fq文件 genebank文件 为数据小文件<br />
60.  序列格式化成每行等长并打印的子函数<br />
61. 从公司返还的注释结果中提取query2gi2GO.table -- for blast3go</div>
<div>62. blast2go anno文件转换成blast3go输入文件</div>
</blockquote>
<div>
<blockquote><p>63. 提取任意组装结果最长转录本(so-called Unigenes)或者CDS预测结果中最长序列64. 表格类数据，以某一列为keys组成的Group中仅保留其对应某属性（另一列）中值最大的一类 65. 小文件行随机化 66.  打印匹配行及其前'指定数目'行67.  打印匹配行及其后'指定数目'行 68.  -n的多个文件区别对待 69. 按照列名提取文件多列 70. 批量提取多个序列多个区段 71. 输出fasta文件每个序列对应的长度 ID\tLength\n72. jar发布前以来外源lib中的jar瘦身73. 依据step长度输出字符串所有后kmer子串74. 基于SAM文件统计ref的每个序列的uniq counts并输出reads的uniq mapped rate统计信息（用于表达谱差异分析 75. 汇总所有counts table并进行无表达补零操作（用于表达谱差异分析76. 保留fastq文件指定长度的读段最优子串77. 输出fasta文件每个记录的A T G C 字数统计78. 合并配对的读段文件fastq 正反读段交错 79. 统计SAM文件 CIGAR的命令 80. fasta文件去除ID行完全重复的记录 81. 合并所有文件的指定列 82. 根据id文件提取第二个文件中多个id匹配行83. 根据某一列的不同值将一个文件分割为多个文件84. 保留高表达或者去除低表达(WGCNA) 85. 表格类数据依据第一列，加和其他所有列，去冗余 86. ghostz比对到nr的表格提取query2gi.table</p>
<div>87. fastqReader<br />
88. Linux下依据 SRA run number下载SRA数据<br />
89. 快速批量统计fq.gz文件行数<br />
90. 格式化mapman结果（mercator）<br />
91. 基因表达量表格做行标准化<br />
92. 基于ID列表提取表格（考虑待提取的表格中有单ID对应多行记录）<br />
93. 文件批量重命名（提供一个重命名列表）<br />
94. perl批量添加fasta文件前缀 （用于多个样本分开组装后合并并用于去冗余等操作）<br />
95. 对表达量表格或者counts表格 依据平均值进行排序<br />
96. 双联表计算卡方值<br />
97. 整理bowtie的比对结果<br />
98. 基于给定列名顺序调整表格列顺序<br />
99.  整理GeneBank文件 （分离地点）<br />
100. 双列文件 整理 为 0-1 交集矩阵<br />
101. 整理bowtie2的比对结果<br />
102. 整理fastqc结果，提取所有样本的读段数<br />
103. 整理STAR比对结果</div>
</blockquote>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/1670.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>画基因的外显子覆盖度图</title>
		<link>http://www.bio-info-trainee.com/1392.html</link>
		<comments>http://www.bio-info-trainee.com/1392.html#comments</comments>
		<pubDate>Sun, 31 Jan 2016 07:15:20 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[基因组学]]></category>
		<category><![CDATA[基因]]></category>
		<category><![CDATA[外显子]]></category>
		<category><![CDATA[覆盖度图]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=1392</guid>
		<description><![CDATA[一般情况下，我们得到了测序reads在基因组的比对情况文件bam格式的，里面的信 &#8230; <a href="http://www.bio-info-trainee.com/1392.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div>一般情况下，我们得到了测序reads在基因组的比对情况文件bam格式的，里面的信息非常多，如果我想特定的查看某个基因的情况，那么我们可以选择IGV等可视化工具，但它并不是万能的，因为即使是一个基因，它也会有多个转录本，多个外显子。</div>
<div>所以，我们可以画它的外显子覆盖图，如下：横坐标是外显子的长度，纵坐标是测序深度，每一个小图都是一个外显子</div>
<div> <a href="http://www.bio-info-trainee.com/wp-content/uploads/2016/01/DMD.NM_000109.png"><img class="alignnone size-full wp-image-1394" src="http://www.bio-info-trainee.com/wp-content/uploads/2016/01/DMD.NM_000109.png" alt="DMD.NM_000109" width="1080" height="1080" /></a></div>
<div>根据这个图，我们就可以很明显的看出，DMD基因NM_000109转录本的1，10-17号外显子缺失，用IGV一个个的看这些外显子区域，是同样的结果！可能是芯片捕获不到，也可能是样本本身变异，造成的大片段缺失。但是这个图的信息就非常有用！</div>
<div>那么，我们该如何画这样的图呢？</div>
<div>首先，我们需要找到需要探究的基因的全部转录信息，及外显子信息！</div>
<div>在hg19_refGene.txt里面会有，在UCSC里面可以下载，新手可能会比较麻烦，实在不行你去annovar的目录也可以找到！</div>
<div><a href="http://www.bio-info-trainee.com/wp-content/uploads/2016/01/16.png"><img class="alignnone size-full wp-image-1395" src="http://www.bio-info-trainee.com/wp-content/uploads/2016/01/16.png" alt="1" width="878" height="370" /></a></div>
<div>那么，我们根据这个信息，就可以判断该基因的起始终止位点啦</div>
<div>然后用samtools的depth命令去找这个基因的全部片段的测序深度信息</div>
<div>最后再格式化成下面的三列数据</div>
<div>第一列是该外显子的坐标，从1到该外显子的成都</div>
<div>第二列是该外显子在该坐标的测序深度，通过samtools的depth命令得到</div>
<div>最后一列是该外显子的标记，从exon:79一直倒推到exon:1，因为该基因在染色体的负链，所以外显子顺序是反着的！</div>
<div>1 84 exon:79</div>
<div>2 84 exon:79</div>
<div>3 84 exon:79</div>
<div>4 85 exon:79</div>
<div>5 85 exon:79</div>
<div>6 86 exon:79</div>
<div>7 85 exon:79</div>
<div>8 87 exon:79</div>
<div>9 89 exon:79</div>
<div>10 91 exon:79</div>
<div>11 92 exon:79</div>
<div>12 95 exon:79</div>
<div>13 96 exon:79</div>
<div>14 96 exon:79</div>
<div>15 99 exon:79</div>
<div>16 99 exon:79</div>
<div>17 97 exon:79</div>
<div>最后根据这个txt文档，用R语言，很容易就画出上面那样的图片了！</div>
<div>这里面的信息量还是蛮大的！</div>
<div></div>
<div><a href="http://www.bio-info-trainee.com/wp-content/uploads/2016/01/APOB.NM_000384.png"><img class="alignnone  wp-image-1393" src="http://www.bio-info-trainee.com/wp-content/uploads/2016/01/APOB.NM_000384.png" alt="APOB.NM_000384" width="921" height="921" /></a></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/1392.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell里面的各种括号的区别</title>
		<link>http://www.bio-info-trainee.com/1018.html</link>
		<comments>http://www.bio-info-trainee.com/1018.html#comments</comments>
		<pubDate>Fri, 25 Sep 2015 14:42:30 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[脚本]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=1018</guid>
		<description><![CDATA[[],[[]],(),(()),{},{{}},以及在前面加上$的区别，以及它们 &#8230; <a href="http://www.bio-info-trainee.com/1018.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h1>[],[[]],(),(()),{},{{}},以及在前面加上$的区别，以及它们互相杂交组合的区别！！！</h1>
<p>[[ ]] double brackets</p>
<p>(())<em>Double parentheses</em></p>
<p>{{}}<em>double curly brackets</em></p>
<p>我们必须要记住的是下面</p>
<p>[] 相当于test，作逻辑判断</p>
<p>$( ) 与` ` (反引号) 都是用来做命令替换用</p>
<p>${ } 吧... 它其实就是用来作变量替换用的啦</p>
<p>(())就是用来计算的，相当于expr函数。</p>
<p>参考：<a href="http://sayle.net/book/basics.htm">http://sayle.net/book/</a></p>
<p><a href="http://tldp.org/LDP/abs/html/index.html">http://tldp.org/LDP/abs/html/index.html</a></p>
<p>&nbsp;</p>
<p>我们首先看看一对的括号</p>
<p>首先[]是用来逻辑判断的，必须有空格</p>
<p>if [ -f binom.py ]</p>
<p>then</p>
<p>echo 'binom.py exists'</p>
<p>fi</p>
<p>或者</p>
<p>nub=$((i%4))</p>
<p>#echo $nub</p>
<p>if [ $nub == 0 ];then</p>
<p>echo "we need to sleep 4 hours"</p>
<p>sleep 14000</p>
<p>fi</p>
<p>这个[]操作符等价于test函数</p>
<p>if test $1 -gt 0<br />
then<br />
echo "$1 number is positive"<br />
fi</p>
<p>但是都必须有空格！！！</p>
<p>参考：<a href="http://www.freeos.com/guides/lsst/ch03sec02.html">http://www.freeos.com/guides/lsst/ch03sec02.html</a></p>
<p>关于shell的test操作符还有很多<a href="http://tldp.org/LDP/abs/html/fto.html">http://tldp.org/LDP/abs/html/fto.html</a></p>
<p>( ) 将command group 置于 sub-shell 去执行，也称 nested sub-shell。</p>
<p>{ } 则是在同一个 shell 内完成，也称为non-named command group。</p>
<p>补充一个: {} 还可以做变量扩展 {5..9}  或者 {abcd}e， 自己运行一下就知道效果啦</p>
<p>这两个差异很小，而且一般用不着，就不讲了。</p>
<p>那么这一对的括号加上了$符号后又变成了上面鬼东西呢？</p>
<p><b>当然，只有</b><b>：</b><b>$( ) </b><b>与</b><b>${ }</b><b>才是合法的。</b></p>
<p>在 bash shell 中，$( ) 与` ` (反引号) 都是用来做命令替换用(command substitution)的。</p>
<p>在操作上，用$( ) 或` ` 都无所谓，用$( )的优点是：</p>
<p>1, ` ` 很容易与' ' ( 单引号)搞混乱，尤其对初学者来说</p>
<p>2, 在多层次的复合替换中，` ` 须要额外的跳脱( \` )处理，而$( ) 则比较直观</p>
<p>再让我们看${ } 吧... 它其实就是用来作变量替换用的啦。</p>
<p>一般情况下，$var 与${var} 并没有啥不一样。</p>
<p>但是用${ } 会比较精确的界定变量名称的范围，比方说：</p>
<p>[code][/code]</p>
<p>$ A=B</p>
<p>$ echo $AB</p>
<p>还可以用来截取变量，这个就很多花样啦</p>
<p># 是去掉左边(在鉴盘上# 在$ 之左边)</p>
<p>% 是去掉右边(在鉴盘上% 在$ 之右边)</p>
<p>单一符号是最小匹配﹔两个符号是最大匹配</p>
<p>&nbsp;</p>
<p>然后我们看看两对的括号：</p>
<p>nub=$((i%4)) 等价于$nub=`expr $i % 1` ;</p>
<p>((i++)) 等价于$i=`expr $i + 1` ;</p>
<p>所以(())就是用来计算的，而且里面的变量不需要$来标记啦</p>
<p>（在 $(( )) 中的变量名称，可于其前面加$ 符号来替换，也可以不用）</p>
<p>在(())前面加上$只是为了把计算结果给保存而已。</p>
<p><b>而两个中括号和两个大括号都是不合法的！</b></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/1018.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>美国Minnesota大学的生信全套课件分享</title>
		<link>http://www.bio-info-trainee.com/655.html</link>
		<comments>http://www.bio-info-trainee.com/655.html#comments</comments>
		<pubDate>Tue, 21 Apr 2015 13:06:12 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[爬虫]]></category>
		<category><![CDATA[生信]]></category>
		<category><![CDATA[课件]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=655</guid>
		<description><![CDATA[刚才在知乎什么看到了一篇分享pacbio的数据特征，顺便看到了Minnesota &#8230; <a href="http://www.bio-info-trainee.com/655.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>刚才在知乎什么看到了一篇分享pacbio的数据特征，顺便看到了Minnesota大学的关于生物信息的教程的ppt合集，所以就想打包下载。</p>
<p>https://www.msi.umn.edu/tutorial-materials</p>
<p>这个网页里面有64篇pdf格式的ppt，还有几个压缩包，本来是准备写爬虫来爬去的，但是后来想了想有点麻烦，而且还不一定会看，反正也是玩玩<br />
就用linux的命令行简单实现了这个爬虫功能。<br />
curl https://www.msi.umn.edu/tutorial-materials &gt;tmp.txt<br />
perl -alne '{/(https.*?pdf)/;print $1 if $1}' tmp.txt &gt;pdf.address<br />
perl -alne '{/(https.*?txt)/;print $1 if $1}' tmp.txt<br />
perl -alne '{/(https.*?zip)/;print $1 if $1}' tmp.txt &gt;zip.address<br />
wget -i pdf.address<br />
wget -i pdf.zip<br />
这样就可以啦！<br />
教程ppt列表如下，大家有兴趣的可以自行下载浏览。</p>
<p>2009-04-22-mrm-presentation_0.pdf               Matlab_viz_image_UMR.pdf<br />
Analyzing ChIP at the command line.pdf          MaxQuant_Introduction_112409.pdf<br />
Analyzing ChIP using Galaxy.pdf                 Maxquant-step-by-step_rs091124.pdf<br />
Badalamenti_PacBio_tutorial_12-10-2014.pdf      MSI Applications Catalog Oct 21 MB slides.pdf<br />
basics_chip_seq.pdf                             MSIIntro2013Jun18.pdf<br />
Best_Practices_GATK_Variant_Detection_v1_0.pdf  MSIIntroBMEN5311.pdf<br />
blast2go.pdf                                    MSI_Workshop_for_Introduction_to_Structure_based_Drug_Design.pdf<br />
ClinProTools_0.pdf                              MTLB_GPUs.pdf<br />
CUDA_Programming.pdf                            OpenMP.tutorial_1.pdf<br />
cuda_tutorial_performance.pdf                   Open_Source_Proteomics_1.pdf<br />
FLUENT_2009April21_final.pdf                    OptimizingWithGA.pdf<br />
FLUENT_tutorial_2008aug14fin.pdf                Orbi_Data_Analysis_092811.pdf<br />
galaxy_101_V4_ljm_0.pdf                         Partek Training Handout_miRNA and mRNA Data Analysis.pdf<br />
GPU_tools.pdf                                   PerformanceTuning_itasca_11_27_12_0.pdf<br />
gpututorial-msi.pdf                             PETSc_Tutorial.pdf<br />
Hands_On_Tutorial_Using_ProTIP.pdf              Phi_Intro.pdf<br />
Introduction to MSI Systems.pdf                 Protein_Grouping_FDR_Analysis_and_Database_Pratik_March2012_Draft.pdf<br />
Introduction_to_PEAKS_0.pdf                     Proteomics_MSI_072309_Print.pdf<br />
Introduction_to_SBDD.pdf                        pymol_v5.pdf<br />
IntroMPI2011july19c.pdf                         QC_illumina_galaxy_V1_ljm.pdf<br />
IntroMPI2012_July25-part1.pdf                   Quality Control of Illumina Data at the Command Line.pdf<br />
IntroMSI2014.pdf                                remotevisualization.pdf<br />
IntroNWChem.pdf                                 RISS_Hsapiens_variant_Detection_v3.0-small.pdf<br />
IntroOpenMP_2011jun28b.pdf                      RNA_seq_Lecture2_2014_v2.pdf<br />
Intro_to_GAMESS.pdf                             RNA-Seq mod1v6.pdf<br />
IntroToGaussian09.pdf                           R_Spring2012_ver2.pdf<br />
introtomolpro.pdf                               SchrodingerTutorial2011.pdf<br />
Intro_to_MSI_Physicists.pdf                     Sybyl.pdf<br />
intro-to-perl.pdf                               Tutorial-Hsap-v15.pdf<br />
Matlab_11_29_UMR.pdf                            Tutorial-Stuber-v12-1.pdf<br />
Matlab_PCT.pdf                                  unix2013.6.18.pdf<br />
MATLAB_Tuning.pdf                               WRKSP_2_19.pdf</p>
<p>Total wall clock time: 40m 22s<br />
Downloaded: 64 files, 249M in 40m 2s (106 KB/s)</p>
<p>我都已经下载好了，打包压缩到群里面啦！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/655.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bowtie算法第六讲-tally法对bwt索引进行搜索</title>
		<link>http://www.bio-info-trainee.com/650.html</link>
		<comments>http://www.bio-info-trainee.com/650.html#comments</comments>
		<pubDate>Sat, 18 Apr 2015 14:46:04 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[bowtie]]></category>
		<category><![CDATA[bwt]]></category>
		<category><![CDATA[tally]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=650</guid>
		<description><![CDATA[因为要讲搜索，所以我选择了一个长一点的字符串来演示多种情况的搜索 perl ro &#8230; <a href="http://www.bio-info-trainee.com/650.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>因为要讲搜索，所以我选择了一个长一点的字符串来演示多种情况的搜索</p>
<p>perl rotation_one_by_one.pl atgtgtcgtagctcgtnncgt</p>
<p>程序运行的结果如下</p>
<p>$ATGTGTCGTAGCTCGTNNCGT 21</p>
<p>AGCTCGTNNCGT$ATGTGTCGT 9</p>
<p>ATGTGTCGTAGCTCGTNNCGT$ 0</p>
<p>CGT$ATGTGTCGTAGCTCGTNN 18</p>
<p>CGTAGCTCGTNNCGT$ATGTGT 6</p>
<p>CGTNNCGT$ATGTGTCGTAGCT 13</p>
<p>CTCGTNNCGT$ATGTGTCGTAG 11</p>
<p>GCTCGTNNCGT$ATGTGTCGTA 10</p>
<p>GT$ATGTGTCGTAGCTCGTNNC 19</p>
<p>GTAGCTCGTNNCGT$ATGTGTC 7</p>
<p>GTCGTAGCTCGTNNCGT$ATGT 4</p>
<p>GTGTCGTAGCTCGTNNCGT$AT 2</p>
<p>GTNNCGT$ATGTGTCGTAGCTC 14</p>
<p>NCGT$ATGTGTCGTAGCTCGTN 17</p>
<p>NNCGT$ATGTGTCGTAGCTCGT 16</p>
<p>T$ATGTGTCGTAGCTCGTNNCG 20</p>
<p>TAGCTCGTNNCGT$ATGTGTCG 8</p>
<p>TCGTAGCTCGTNNCGT$ATGTG 5</p>
<p>TCGTNNCGT$ATGTGTCGTAGC 12</p>
<p>TGTCGTAGCTCGTNNCGT$ATG 3</p>
<p>TGTGTCGTAGCTCGTNNCGT$A 1</p>
<p>TNNCGT$ATGTGTCGTAGCTCG 15</p>
<p>它的BWT及索引是</p>
<p>T 21</p>
<p>T 9</p>
<p>$ 0</p>
<p>N 18</p>
<p>T 6</p>
<p>T 13</p>
<p>G 11</p>
<p>A 10</p>
<p>C 19</p>
<p>C 7</p>
<p>T 4</p>
<p>T 2</p>
<p>C 14</p>
<p>N 17</p>
<p>T 16</p>
<p>G 20</p>
<p>G 8</p>
<p>G 5</p>
<p>C 12</p>
<p>G 3</p>
<p>A 1</p>
<p>G 15</p>
<p>然后得到它的tally文件如下</p>
<p><a href="http://www.bio-info-trainee.com/wp-content/uploads/2015/04/图片1.png"><img class="alignnone size-full wp-image-651" src="http://www.bio-info-trainee.com/wp-content/uploads/2015/04/图片1.png" alt="图片1" width="418" height="423" /></a></p>
<p>接下来用我们的perl程序在里面找字符串</p>
<p>第一次我测试 GTGTCG 这个字符串，程序可以很清楚的看到它的查找过程。</p>
<p>perl search_char.pl    GTGTCG   tm.tally</p>
<p>your last char is G</p>
<p>start is 7 ; and end is 13</p>
<p>now it is number 5 and the char is C</p>
<p>start is 3 ; and end is 6</p>
<p>now it is number 4 and the char is T</p>
<p>start is 17 ; and end is 19</p>
<p>now it is number 3 and the char is G</p>
<p>start is 10 ; and end is 11</p>
<p>now it is number 2 and the char is T</p>
<p>start is 19 ; and end is 20</p>
<p>now it is number 1 and the char is G</p>
<p>start is 11 ; and end is 12</p>
<p>It is just one perfect match !</p>
<p>The index is 2</p>
<p>第二次我测试一个多重匹配的字符串GT，在原字符串出现了五次的</p>
<p>perl search_char.pl  GT  tm.tally</p>
<p>your last char is T</p>
<p>start is 15 ; and end is 22</p>
<p>now it is number 1 and the char is G</p>
<p>start is 8 ; and end is 13</p>
<p>we find more than one perfect match!!!</p>
<p>8 13</p>
<p>One of the index is 11</p>
<p>One of the index is 10</p>
<p>One of the index is 19</p>
<p>One of the index is 7</p>
<p>One of the index is 4</p>
<p>One of the index is 2</p>
<p>One of the index is 14</p>
<p>惨了，这个是很严重的bug，不知道为什么，对于多个匹配总是会多出那么一点点的结果。</p>
<p>去转换矩阵里面查看，可知，前面两个结果11和10是错误的。</p>
<p>CTCGTNNCGT$ATGTGTCGTAG 11</p>
<p>GCTCGTNNCGT$ATGTGTCGTA 10</p>
<p>GT$ATGTGTCGTAGCTCGTNNC 19</p>
<p>GTAGCTCGTNNCGT$ATGTGTC 7</p>
<p>GTCGTAGCTCGTNNCGT$ATGT 4</p>
<p>GTGTCGTAGCTCGTNNCGT$AT 2</p>
<p>GTNNCGT$ATGTGTCGTAGCTC 14</p>
<p>最后我们测试未知字符串的查找。</p>
<p>perl search_char.pl ACATGTGT tm.tally</p>
<p>your last char is T</p>
<p>start is 15 ; and end is 22</p>
<p>now it is number 7 and the char is G</p>
<p>start is 8 ; and end is 13</p>
<p>now it is number 6 and the char is T</p>
<p>start is 19 ; and end is 21</p>
<p>now it is number 5 and the char is G</p>
<p>start is 11 ; and end is 12</p>
<p>now it is number 4 and the char is T</p>
<p>start is 20 ; and end is 21</p>
<p>now it is number 3 and the char is A</p>
<p>start is 2 ; and end is 3</p>
<p>now it is number 2 and the char is C</p>
<p>start is 3 ; and end is 3</p>
<p>we can just find the last 6 char ,and it is ATGTGT</p>
<p>原始字符串是ATGTGTCGTAGCTCGTNNCGT，所以查找的挺对的！！！</p>
<p>&nbsp;</p>
<p>[perl]</p>
<p>$a=$ARGV[0];</p>
<p>$a=uc $a;</p>
<p>open FH,&quot;&lt;$ARGV[1]&quot;;</p>
<p>while(&lt;FH&gt;){</p>
<p>chomp;</p>
<p>@F=split;</p>
<p>$hash_count_atcg{$F[0]}++;</p>
<p>$hash{$.}=$_;</p>
<p># the first line is $ and the last char and the last index !</p>
<p>}</p>
<p>$all_a=$hash_count_atcg{'A'};</p>
<p>$all_c=$hash_count_atcg{'C'};</p>
<p>$all_g=$hash_count_atcg{'G'};</p>
<p>$all_n=$hash_count_atcg{'N'};</p>
<p>$all_t=$hash_count_atcg{'T'};</p>
<p>#print &quot;$all_a\t$all_c\t$all_g\t$all_t\n&quot;;</p>
<p>$len_a=length $a;</p>
<p>$end_a=$len_a-1;</p>
<p>#print &quot;your query is $a\n&quot;;</p>
<p>#print &quot;and the length of your query is $len_a \n&quot;;</p>
<p>$after=substr($a,$end_a,1);</p>
<p>#we fill search your query from the last char !</p>
<p>if ($after eq 'A') {</p>
<p>$start=2;</p>
<p>$end=$all_a+1;</p>
<p>}</p>
<p>elsif ($after eq 'C') {</p>
<p>$start=$all_a+1;</p>
<p>$end=$all_a+$all_c+1;</p>
<p>}</p>
<p>elsif ($after eq 'G') {</p>
<p>$start=$all_a+$all_c+1;</p>
<p>$end=$all_a+$all_c+$all_g+1;</p>
<p>}</p>
<p>elsif ($after eq 'T'){</p>
<p>$start=$all_a+$all_c+$all_g+$all_n+1;</p>
<p>$end=$all_a+$all_c+$all_g+$all_t+$all_n+1;</p>
<p>}</p>
<p>else {die &quot;error !!! we just need A T C G !!!\n&quot;}</p>
<p>print &quot;your last char is $after\n &quot;;</p>
<p>print &quot;start is $start ; and end is $end \n&quot;;</p>
<p>foreach (reverse (1..$end_a)){</p>
<p>$after=substr($a,$_,1);</p>
<p>$before=substr($a,$_-1,1);</p>
<p>($start,$end)=&amp;find_level($after,$before,$start,$end);</p>
<p>print &quot;now it is number $_ and the char is $before \n &quot;;</p>
<p>print &quot;start is $start ; and end is $end \n&quot;;</p>
<p>if ($_  &gt; 1 &amp;&amp; $start == $end) {</p>
<p>$find_char=substr($a,$_);</p>
<p>$find_len=length $find_char;</p>
<p>print &quot;we can just find the last $find_len char ,and it is $find_char \n&quot;;</p>
<p>#return &quot;miss&quot;;</p>
<p>last;</p>
<p>}</p>
<p>if ($_ == 1) {</p>
<p>if (($end-$start)==1) {</p>
<p>print &quot;It is just one perfect match ! \n&quot;;</p>
<p>my @F_start=split/\s+/,$hash{$end};</p>
<p>print &quot;The index is $F_start[1]\n&quot;;</p>
<p>#return $F_start[1];</p>
<p>last;</p>
<p>}</p>
<p>else {</p>
<p>print &quot;we find more than one perfect match!!!\n&quot;;</p>
<p>print &quot;$start\t$end\n&quot;;</p>
<p>foreach  (($start-1)..$end) {</p>
<p>my @F_start=split/\s+/,$hash{$_};</p>
<p>print &quot;One of the index is $F_start[1]\n&quot;;</p>
<p>}</p>
<p>#return &quot;multiple&quot;;</p>
<p>last;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>sub find_level{</p>
<p>my($after,$before,$start,$end)=@_;</p>
<p>my @F_start=split/\s+/,$hash{$start};</p>
<p>my @F_end=split/\s+/,$hash{$end};</p>
<p>if ($before eq 'A') {</p>
<p>return ($F_start[2]+1,$F_end[2]+1);</p>
<p>}</p>
<p>elsif ($before eq 'C') {</p>
<p>return ($all_a+$F_start[3]+1,$all_a+$F_end[3]+1);</p>
<p>}</p>
<p>elsif ($before eq 'G') {</p>
<p>return ($all_a+$all_c+1+$F_start[4],$all_a+$all_c+1+$F_end[4]);</p>
<p>}</p>
<p>elsif ($before eq 'T') {</p>
<p>return ($all_a+$all_c+$all_g+$all_n+1+$F_start[5],$all_a+$all_c+$all_g+1+$all_n+$F_end[5]);</p>
<p>}</p>
<p>else {die &quot;error !!! we just need A T C G !!!\n&quot;}</p>
<p>}</p>
<p>[/perl]</p>
<p>&nbsp;</p>
<p>原始字符串是atgtgtcgtagctcgtnncgt</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/650.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bowtie算法第五讲-index2tally</title>
		<link>http://www.bio-info-trainee.com/648.html</link>
		<comments>http://www.bio-info-trainee.com/648.html#comments</comments>
		<pubDate>Sat, 18 Apr 2015 14:02:47 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[生信基础]]></category>
		<category><![CDATA[bwt]]></category>
		<category><![CDATA[tally]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=648</guid>
		<description><![CDATA[前面讲到了如何用笨方法进行字符串搜索，也讲了如何构建bwt索引，和把bwt索引还 &#8230; <a href="http://www.bio-info-trainee.com/648.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>前面讲到了如何用笨方法进行字符串搜索，也讲了如何构建bwt索引，和把bwt索引还原成字符串！</p>
<p>原始字符串是ATGCGTANNGTC</p>
<p>排序过程是下面的</p>
<p>$ATGCGTANNGTC 12</p>
<p>ANNGTC$ATGCGT 6</p>
<p>ATGCGTANNGTC$ 0</p>
<p>C$ATGCGTANNGT 11</p>
<p>CGTANNGTC$ATG 3</p>
<p>GCGTANNGTC$AT 2</p>
<p>GTANNGTC$ATGC 4</p>
<p>GTC$ATGCGTANN 9</p>
<p>NGTC$ATGCGTAN 8</p>
<p>NNGTC$ATGCGTA 7</p>
<p>TANNGTC$ATGCG 5</p>
<p>TC$ATGCGTANNG 10</p>
<p>TGCGTANNGTC$A 1</p>
<p>现在讲讲如何根据bwt索引构建tally，并且用tally搜索方法来搜索字符串！</p>
<p>首先是bwt索引转换为tally</p>
<p>C 12</p>
<p>T 6</p>
<p>$ 0</p>
<p>T 11</p>
<p>G 3</p>
<p>T 2</p>
<p>C 4</p>
<p>N 9</p>
<p>N 8</p>
<p>A 7</p>
<p>G 5</p>
<p>G 10</p>
<p>A 1</p>
<p>这个其实非常简单的，tally就是增加四列计数的列即可</p>
<p>[perl]</p>
<p>$hash_count{'A'}=0;</p>
<p>$hash_count{'C'}=0;</p>
<p>$hash_count{'G'}=0;</p>
<p>$hash_count{'T'}=0;</p>
<p>open FH ,&quot;&lt;$ARGV[0]&quot;;</p>
<p>while(&lt;FH&gt;){</p>
<p>        chomp;</p>
<p> @F=split;</p>
<p> $last=$F[0]; # 读取上面的tally文件，分列，判断第一列，并计数</p>
<p>        $hash_count{$last}++;</p>
<p>   print  &quot;$_\t$hash_count{'A'}\t$hash_count{'C'}\t$hash_count{'G'}\t$hash_count{'T'}\n&quot;;</p>
<p>}</p>
<p>[/perl]</p>
<p>输出的tally如下</p>
<p>C 12 0 1 0 0</p>
<p>T 6 0 1 0 1</p>
<p>$ 0 0 1 0 1</p>
<p>T 11 0 1 0 2</p>
<p>G 3 0 1 1 2</p>
<p>T 2 0 1 1 3</p>
<p>C 4 0 2 1 3</p>
<p>N 9 0 2 1 3</p>
<p>N 8 0 2 1 3</p>
<p>A 7 1 2 1 3</p>
<p>G 5 1 2 2 3</p>
<p>G 10 1 2 3 3</p>
<p>A 1 2 2 3 3</p>
<p>接下来就是针对这个tally的查询函数了</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/648.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bowtie 算法第四讲</title>
		<link>http://www.bio-info-trainee.com/646.html</link>
		<comments>http://www.bio-info-trainee.com/646.html#comments</comments>
		<pubDate>Sat, 18 Apr 2015 11:51:18 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[bowtie]]></category>
		<category><![CDATA[bwa]]></category>
		<category><![CDATA[bwt]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=646</guid>
		<description><![CDATA[由于之前就简单的看了看bowtie作者的ppt，没有完全吃透就开始敲代码了，写了 &#8230; <a href="http://www.bio-info-trainee.com/646.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>由于之前就简单的看了看bowtie作者的ppt，没有完全吃透就开始敲代码了，写了十几个程序最后我自己都搞不清楚进展到哪一步了，所以我现在整理一下，从新开始！！！</p>
<p>&nbsp;</p>
<p>首先，bowtie的作用就是在一个大字符串里面搜索一个小字符串！那么本身就有一个非常笨的复杂方法来搜索，比如，大字符串长度为100万，小字符串为10，那么就依次取出大字符串的10个字符来跟小字符串比较即可，这样的算法是非常不经济的，我简单用perl代码实现一下。</p>
<p>[perl]</p>
<p>#首先读取大字符串的fasta文件</p>
<p>open FH ,&quot;&lt;$ARGV[0]&quot;;</p>
<p>$i=0;</p>
<p>while (&lt;FH&gt;) {</p>
<p>next if /^&gt;/;</p>
<p>chomp;</p>
<p>$a.=(uc);</p>
<p>}</p>
<p>#print &quot;$a\n&quot;;</p>
<p>#然后接受我们的小的查询字符串</p>
<p>$query=uc $ARGV[1];</p>
<p>$len=length $a;</p>
<p>$len_query=length $query;</p>
<p>$a=$a.'$'.$a;</p>
<p>#然后依次循环取大字符串来精确比较！</p>
<p>foreach (0..$len-1){</p>
<p>if (substr($a,$_,$len_query) eq $query){</p>
<p>print &quot;$_\n&quot;;</p>
<p>#last;</p>
<p>}</p>
<p>}</p>
<p>[/perl]</p>
<p>&nbsp;</p>
<p>这样在时间复杂度非常恐怖，尤其是对人的30亿碱基。</p>
<p>&nbsp;</p>
<p>正是因为这样的查询效率非常低，所以我们才需要用bwt算法来构建索引，然后根据tally来进行查询</p>
<p>其中构建索引有三种方式，我首先讲最效率最低的那种索引构造算法，就是依次取字符串进行旋转，然后排序即可。</p>
<p>[perl]</p>
<p>$a=uc $ARGV[0];</p>
<p>$len=length $a;</p>
<p>$a=$a.'$'.$a;</p>
<p>foreach (0..$len){</p>
<p>$hash{substr($a,$_,$len+1)}=$_;</p>
<p>}</p>
<p>#print &quot;$_\t$hash{$_}\n&quot; foreach sort keys %hash;</p>
<p>print  substr($_,-1),&quot;\t$hash{$_}\n&quot; foreach sort keys %hash;</p>
<p>[/perl]</p>
<p>这个算法从时间复杂度来讲是非常经济的，对小字符串都是瞬间搞定！！！</p>
<p>perl rotation_one_by_one.pl atgcgtanngtc 这个字符串的BWT矩阵索引如下！</p>
<p>C 12</p>
<p>T 6</p>
<p>$ 0</p>
<p>T 11</p>
<p>G 3</p>
<p>T 2</p>
<p>C 4</p>
<p>N 9</p>
<p>N 8</p>
<p>A 7</p>
<p>G 5</p>
<p>G 10</p>
<p>A 1</p>
<p>但同样的，它也有一个无法避免的弊端，就是内存消耗太恐怖。对于30亿的人类碱基来说，这样旋转会生成30亿乘以30亿的大矩阵，一般的服务器根本hold不住的。</p>
<p>&nbsp;</p>
<p>最后我讲一下，这个BWT矩阵索引如何还原成原字符串，这个没有算法的差别，因为就是很简单的原理。</p>
<p>[perl]</p>
<p>#first read the tally !!!</p>
<p>#首先读取上面输出的BWT矩阵索引文件。</p>
<p>open FH,&quot;&lt;$ARGV[0]&quot;;</p>
<p>$hash_count{'A'}=0;</p>
<p>$hash_count{'C'}=0;</p>
<p>$hash_count{'G'}=0;</p>
<p>$hash_count{'T'}=0;</p>
<p>while(&lt;FH&gt;){</p>
<p>        chomp;</p>
<p>        @F=split;</p>
<p>        $hash_count{$F[0]}++;</p>
<p>        $hash{$.}=&quot;$F[0]\t$F[1]\t$hash_count{$F[0]}&quot;;</p>
<p>#print &quot;$hash{$.}\n&quot;;</p>
<p>}</p>
<p>$all_a=$hash_count{'A'};        </p>
<p>$all_c=$hash_count{'C'};        </p>
<p>$all_g=$hash_count{'G'};        </p>
<p>$all_t=$hash_count{'T'};</p>
<p>$all_n=$hash_count{'N'};</p>
<p>#start from the first char !</p>
<p>$raw='';</p>
<p>&amp;restore(1);</p>
<p>sub restore{</p>
<p>my($num)=@_;</p>
<p>my @F=split/\t/,$hash{$num};</p>
<p>$raw.=$F[0];</p>
<p>   my $before=$F[0];</p>
<p>     if ($before eq 'A') { </p>
<p>$new=$F[2]+1;</p>
<p>        }</p>
<p>        elsif ($before eq 'C') {</p>
<p>               $new=1+$all_a+$F[2];</p>
<p>        }</p>
<p>        elsif ($before eq 'G') {</p>
<p>               $new=1+$all_a+$all_c+$F[2];</p>
<p>        }</p>
<p>elsif ($before eq 'N') {</p>
<p>                $new =1+$all_a+$all_c+$all_g+$F[2];</p>
<p>        }</p>
<p>        elsif ($before eq 'T') {</p>
<p>                $new=1+$all_a+$all_c+$all_g+$all_n+$F[2];</p>
<p>        }</p>
<p>        elsif ($before eq '$') {</p>
<p>chop $raw;</p>
<p>                $raw = reverse $raw;</p>
<p>print &quot;$raw\n&quot;;</p>
<p>exit;</p>
<p>        }</p>
<p>else {die &quot;error !!! we just need A T C N G !!!\n&quot;}</p>
<p>#print &quot;$F[0]\t$new\n&quot;;</p>
<p>&amp;restore($new);</p>
<p>}</p>
<p>[/perl]</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/646.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>推荐linux学习博客-每日一linux命令</title>
		<link>http://www.bio-info-trainee.com/639.html</link>
		<comments>http://www.bio-info-trainee.com/639.html#comments</comments>
		<pubDate>Thu, 16 Apr 2015 01:05:57 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[计算机基础]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=639</guid>
		<description><![CDATA[竹子-博客(.NET/Java/Linux/架构/管理/敏捷) 思索、感悟、践行 &#8230; <a href="http://www.bio-info-trainee.com/639.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.cnblogs.com/peida/">竹子-博客(.NET/Java/Linux/架构/管理/敏捷)</a></p>
<p>思索、感悟、践行！走向高效，快乐，平衡！</p>
<p><a href="http://www.cnblogs.com/peida/tag/%E6%AF%8F%E6%97%A5%E4%B8%80linux%E5%91%BD%E4%BB%A4/default.html?page=1">http://www.cnblogs.com/peida/tag/%E6%AF%8F%E6%97%A5%E4%B8%80linux%E5%91%BD%E4%BB%A4/default.html?page=1</a></p>
<p>已下目录是本人用爬虫爬取的！</p>
<p>每天一个linux命令（61）：wget命令</p>
<p>每天一个linux命令（60）：scp命令</p>
<p>每天一个linux命令（59）：rcp命令</p>
<p>每天一个linux命令（58）：telnet命令</p>
<p>每天一个linux命令（57）：ss命令</p>
<p>每天一个linux命令（56）：netstat命令</p>
<p>每天一个linux命令（55）：traceroute命令</p>
<p>每天一个linux命令（54）：ping命令</p>
<p>每天一个linux命令（53）：route命令</p>
<p>每天一个linux命令（52）：ifconfig命令</p>
<p>每天一个linux命令（51）：lsof命令</p>
<p>每天一个linux命令（50）：crontab命令</p>
<p>每天一个linux命令（49）：at命令</p>
<p>每天一个linux命令（48）：watch命令</p>
<p>每天一个linux命令（47）：iostat命令</p>
<p>每天一个linux命令（46）：vmstat命令</p>
<p>每天一个linux命令（45）：free 命令</p>
<p>每天一个linux命令（44）：top命令</p>
<p>每天一个linux命令（43）：killall命令</p>
<p>每天一个linux命令（42）：kill命令</p>
<p>每天一个linux命令（41）：ps命令</p>
<p>每天一个linux命令（40）：wc命令</p>
<p>每天一个linux命令（39）：grep 命令</p>
<p>每天一个linux命令（38）：cal 命令</p>
<p>每天一个linux命令（37）：date命令</p>
<p>每天一个linux命令（36）：diff 命令</p>
<p>每天一个linux命令（35）：ln 命令</p>
<p>每天一个linux命令（34）：du 命令</p>
<p>每天一个linux命令（33）：df 命令</p>
<p>每天一个linux命令（32）：gzip命令</p>
<p>每天一个linux命令（31）: /etc/group文件详解</p>
<p>每天一个linux命令（30）: chown命令</p>
<p>每天一个linux命令（29）:chgrp命令</p>
<p>每天一个linux命令（28）：tar命令</p>
<p>每天一个linux命令（27）：linux chmod命令</p>
<p>每天一个linux命令（26）：用SecureCRT来上传和下载文件</p>
<p>每天一个linux命令(25)：linux文件属性详解</p>
<p>每天一个linux命令(24)：Linux文件类型与扩展名</p>
<p>每天一个linux命令（23）：Linux 目录结构</p>
<p>每天一个linux命令（22）：find 命令的参数详解</p>
<p>每天一个linux命令（21）：find命令之xargs</p>
<p>每天一个linux命令（20）：find命令之exec</p>
<p>每天一个linux命令（19）：find 命令概览</p>
<p>每天一个linux命令（18）：locate 命令</p>
<p>每天一个linux命令（17）：whereis 命令</p>
<p>每天一个linux命令（16）：which命令</p>
<p>每天一个linux命令（15）：tail 命令</p>
<p>每天一个linux命令（14）：head 命令</p>
<p>每天一个linux命令（13）：less 命令</p>
<p>每天一个linux命令(12)：more命令</p>
<p>每天一个linux命令(11)：nl命令</p>
<p>每天一个linux命令（10）：cat 命令</p>
<p>每天一个linux命令（9）：touch 命令</p>
<p>每天一个linux命令（8）：cp 命令</p>
<p>每天一个linux命令（7）：mv命令</p>
<p>每天一个linux命令（6）：rmdir 命令</p>
<p>每天一个linux命令（5）：rm 命令</p>
<p>每天一个linux命令（4）：mkdir命令</p>
<p>每天一个linux命令（3）：pwd命令</p>
<p>每天一个linux命令(2)：cd命令</p>
<p>每天一个linux命令(1)：ls命令</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/639.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
