这个的工程宝的详细使用方法法(详细)?

samtools 常用的使用方法 - free_mao - 博客园
后记: samtools新版本和老版本用法是不一样的 这里列举的是老版本的用法(samtools_0.1.18), 服务器中已经装了1.2.1版本,用法已经发生了变化。
samtools: Utilities for the SAM format
下面介绍一下samtools 常用的功能:
1,对fasta文件建立index
samtools faidx ref.fasta
注意,& 如果你执行命令的地方和参考序列不在同一个目录,参考序列用全路径过相对路径,最后的index结果和参考序列在同一个目录里面,而不是执行命令的目录。
在fasta文件中,对于某一个序列,除了最后一行,其他行所含碱基数应该一样。
不同序列每行所含base数可以不一样。但是对于同一个序列,必须遵循上面的规则。
否则会报错
2, 将sam文件转化为bam文件
samtools view -bS in.sam & in.bam
是view的一个应用-b指定输出文件为bam, -S 指定输入文件为sam
3, 查看bam文件的header信息
samtools view -H in.bam
4, 将bam文件进行sort
只能对bam文件进行sort, 不能对sam文件。
samtools sort aln.bam anl.sorted&& #默认是根据coordinate进行sort, 如果输入bam文件为in.bam , 则输出文件名为in.sorted.bam
如果要按照read name进行sort,& 需要加-n, 如heseq-count 就要求文件时按照read name& 而不是coordinate。
samtools sort -n aln.bam anl.sorted&&
5,&去除bam文件中pcr导致的重复reads信息
samtools rmdup in.bam in.rmp.bam
6,& 合并bam文件
samtools merge out.bam in1.bam in2.bam in3.bam # 假如in1.bam, in2.bam, in3.bam是某个某样本的三个重复,我们可以将他们合并为一个bam文件。
samtools merge -R chr1 out.bam in1.bam in2.bam in3.bam&&&#& 如果想对部分合并,如至合并一号染色的上的bam文件合并,chr1必须为序列的名字,一号染色体序列的名字为Chr1,那么就应为-R Chr1
注意: 要合并的bam文件,必须有对应的index文件。否则会出现:
[bam_index_load] fail to load BAM index.Segmentation fault (core dumped)的错误
7, 对bam文件建立index
samtools index in.bam& #结果文件名为in.bam.bai
8, 用samtools call snp
另见其他博文
9,取出bam文件的一部分
samtools view -b your.bam Chr1 & Chr1.bam&
-b 指定是输出文件为bam, Chr1指定你要看的是那一部分, 这里指看Chr1那一部分,然后重定向到一个新的bam文件,注意,这个bam文件是没有header的,如果想要包括header 可以使用-h参数。
随机取出bam文件的某一部分出来, 必须要有index文件,否则会报错:
[bam_index_load] fail to load BAM index.[main_samview] random alignment retrieval only works for indexed BAM files.
关于view更详细的参数说明:
Usage:&& samtools view [options] &in.bam&|&in.sam& [region1 [...]]
-b&&&&&& output BAM &&&&&&&&
-h&&&&&& print header for the SAM output &&&&&&&&
-H&&&&&& print header only (no alignments) &&&&&&&&
-S&&&&&& input is SAM &&&&&&&&
-u&&&&&& uncompressed BAM output (force -b) &&&&&&&&
-1&&&&&& fast compression (force -b) &&&&&&&&
-x&&&&&& output FLAG in HEX (samtools-C specific) &&&&&&&&
-X&&&&&& output FLAG in string (samtools-C specific) &&&&&&&&
-c&&&&&& print only the count of matching records &&&&&&&&
-B&&&&&& collapse the backward CIGAR operation &&&&&&&&
-@ INT&& number of BAM compression threads [0] &&&&&&&&
-L FILE& output alignments overlapping the input BED FILE [null] &&&&&&&&
-t FILE& list of reference names and lengths (force -S) [null] &&&&&&&&
-T FILE& reference sequence file (force -S) [null] &&&&&&&&
-o FILE& output file name [stdout] &&&&&&&&
-R FILE& list of read groups to be outputted [null] &&&&&&&&
-f INT&& required flag, 0 for unset [0] &&&&&&&&
-F INT&& filtering flag, 0 for unset [0] &&&&&&&&
-q INT&& minimum mapping quality [0] &&&&&&&&
-l STR&& only output reads in library STR [null] &&&&&&&&
-r STR&& only output reads in read group STR [null] &&&&&&&&
-s FLOAT fraction of te integer part as seed [-1] &&&&&&&
& -?&&&&&& longer help
10,统计bam文件中的reads情况,有多少reads比对上了等等?
命令: samtools flagstat RF12.merged.bam
结果说明: + 0 in total (QC-passed reads + QC-failed reads)
#bam文件中所有的reads数。
0 + 0 duplicates + 0 mapped (100.00%:-nan%)
#比对到基因组上的reads数目, 我用的比对软件是tophat, 结果中只保留比对上的reads信息。
+ 0 paired in sequencing
#属于paired reads数目, 我的数据都是双端测序。所以都是paired reads。
#来自于read1中的reads数目
#来自于read2 中的reads数目
#read1 + read2 = paired reads
+ 0 properly paired (69.08%:-nan%)
#完美匹配的reads数, 即一对reads比对到同一条参考序列,并且这对reads之间的举例符合设置的阈值
+ 0 with itself and mate mapped
#一对reads 都比对到了参考序列上,但是不一定比对到同一条染色体
5078344 + 0 singletons (7.67%:-nan%)
#一对reads中,只有一条匹配到了参考序列上。
703397 + 0 with mate mapped to a different chr
#一对reads比对到了不同的染色体上。针对的是with itself and mate mapped
346693 + 0 with mate mapped to a different chr (mapQ&=5)
#和上面一样,只不过比对的质量大于等于5的reads数目
11, bam文件 转化为sam文件。 比如htseq-count老版本只接受sam文件
&samtools view -h R12.merged.bam & test.sam
-h是将bam文件中的header也加入到sam文件中。
&12, 知道位置信息查找对应的序列信息
samtools faidx ref.fa Chr1:
指查看染色体一上的第33667个碱基。
by freeamo
随笔 - 133当前位置:
& Swift - SwiftyJSON的使用详解(附样例,用于JSON数据处理)
Swift - SwiftyJSON的使用详解(附样例,用于JSON数据处理)
发布:hangge
阅读:34978
1,SwiftyJSON介绍与配置
SwiftyJSON是个使用Swift语言编写的开源库,可以让我们很方便地处理JSON数据(解析数据、生成数据)。
GitHub地址:
使用配置:直接将 SwiftyJSON.swift 添加到项目中即可。
2,SwiftyJSON的优点
同 JSONSerializationSwiftyJSON 相比,在获取多层次结构的JSON数据时。SwiftyJSON不需要一直判断这个节点是否存在,是不是我们想要的class,下一个节点是否存在,是不是我们想要的class…。同时,SwiftyJSON内部会自动对optional(可选类型)进行拆包(Wrapping ),大大简化了代码。
下面通过几个样例作为演示。(本文代码均已升级至 Swift3)
(1)比如我们有一个如下的JSON数据,表示联系人集合:
"name": "hangge",
"age": 100,
"phones": [
"name": "公司",
"number": "123456"
"name": "家庭",
"number": "001"
"name": "big boss",
"phones": [
"name": "公司",
"number": "111111"
为便于测试比较,我们先将JSON格式的字符串转为Data:
let jsonStr = "[{\"name\": \"hangge\", \"age\": 100, \"phones\": [{\"name\": \"公司\",\"number\": \"123456\"}, {\"name\": \"家庭\",\"number\": \"001\"}]}, {\"name\": \"big boss\",\"age\": 1,\"phones\": [{ \"name\": \"公司\",\"number\": \"111111\"}]}]"
if let jsonData = jsonStr.data(using: String.Encoding.utf8, allowLossyConversion: false) {
//.........
(2)使用JSONSerializationSwiftyJSON解析
比如我们要取第一条联系人的第一个电话号码,每个级别都判断就很麻烦,代码如下:
if let userArray = try? JSONSerialization.jsonObject(with: jsonData,
options: .allowFragments) as? [[String: AnyObject]],
let phones = userArray?[0]["phones"] as? [[String: AnyObject]],
let number = phones[0]["number"] as? String {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
即使使用optional来简化一下,代码也不少:
if let userArray = try? JSONSerialization.jsonObject(with: jsonData,
options: .allowFragments) as? [[String: AnyObject]],
let number = (userArray?[0]["phones"] as? [[String: AnyObject]])?[0]["number"] as? String {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
(3)使用SwiftyJSON解析:
不用担心数组越界,不用判断节点,拆包什么的,代码如下:
let json = JSON(data: jsonData)
if let number = json[0]["phones"][0]["number"].string {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
如果没取到值,还可以走到错误处理来了,打印一下看看错在哪:
let json = JSON(data: jsonData)
if let number = json[0]["phones"][0]["number"].string {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
// 打印错误信息
print(json[0]["phones"][0]["number"])
3,获取网络数据,并使用SwiftyJSON解析
除了解析本地的JSON数据,我们其实更常通过url地址获取远程数据并解析。
(1)与URLSession结合
//创建URL对象
let url = URL(string:"/getJsonData.php")
//创建请求对象
let request = URLRequest(url: url!)
let dataTask = URLSession.shared.dataTask(with: request,
completionHandler: {(data, response, error) -& Void in
if error != nil{
print(error)
let json = JSON(data: data!)
if let number = json[0]["phones"][0]["number"].string {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
}) as URLSessionTask
//使用resume方法启动任务
dataTask.resume()
(2)与Alamofire结合
//创建URL对象
let url = URL(string:"/getJsonData.php")!
Alamofire.request(url).validate().responseJSON { response in
switch response.result.isSuccess {
case true:
if let value = response.result.value {
let json = JSON(value)
if let number = json[0]["phones"][0]["number"].string {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
case false:
print(response.result.error)
4,获取值&
(1)可选值获取(Optional getter)
通过.number、.string、.bool、.int、.uInt、.float、.double、.array、.dictionary、int8、Uint8、int16、Uint16、int32、Uint32、int64、Uint64等方法获取到的是可选择值,我们需要自行判断是否存在,同时不存在的话可以获取具体的错误信息。
if let age = json[0]["age"].int {
print(age)
//打印错误信息
print(json[0]["age"])
if let name = json[0]["name"].string {
print(name)
//打印错误信息
print(json[0]["name"])
(2)不可选值获取(Non-optional getter)
使用 xxxValue 这样的属性获取值,如果没获取到的话会返回一个默认值。省得我们再判断拆包了。
//If not a Number or nil, return 0
let age: Int = json[0]["age"].intValue
//If not a String or nil, return ""
let name: String = json[0]["name"].stringValue
//If not a Array or nil, return []
let list: Array&JSON& = json[0]["phones"].arrayValue
//If not a Dictionary or nil, return [:]
let phone: Dictionary&String, JSON& = json[0]["phones"][0].dictionaryValue
(3)获取原始数据(Raw object)
let jsonObject = json.object as AnyObject
let jsonObject = json.rawValue
as AnyObject
//JSON转化为Data
let data = json.rawData()
//JSON转化为String字符串
if let string = json.rawString() {
//Do something you want
//JSON转化为Dictionary字典([String: AnyObject]?)
if let dic = json.dictionaryObject {
//Do something you want
//JSON转化为Array数组([AnyObject]?)
if let arr = json.arrayObject {
//Do something you want
json[0]["age"].int =
json[0]["name"].string =
json[0]["phones"].arrayObject = [["name":"固话", "number":110],["name":"手机", "number":120]]
json[0]["phones"][0].dictionaryObject = ["name":"固话", "number":100]
6,下标访问(Subscript)
可以通过数字、字符串、数组类型的下标访问JSON数据的层级与属性。比如下面三种方式的结果都是一样的:
let number = json[0]["phones"][0]["number"].stringValue
let number = json[0,"phones",0,"number"].stringValue
let keys:[JSONSubscriptType] = [0,"phones",0,"number"]
let number = json[keys].stringValue
7,循环遍历JSON对象中的所有数据
(1)如果JSON数据是数组类型(Array)
for (index,subJson):(String, JSON) in json {
print("\(index):\(subJson)")
(2)如果JSON数据是字典类型(Dictionary)
for (key,subJson):(String, JSON) in json[0] {
print("\(key):\(subJson)")
8,构造创建JSON对象数据
(1)空的JSON对象
let json: JSON =
(2)使用简单的数据类型创建JSON对象
//StringLiteralConvertible
let json: JSON = "I'm a son"
//IntegerLiteralConvertible
let json: JSON =
//BooleanLiteralConvertible
let json: JSON =
//FloatLiteralConvertible
let json: JSON =
(3)使用数组或字典数据创建JSON对象
//DictionaryLiteralConvertible
let json: JSON =
["I":"am", "a":"son"]
//ArrayLiteralConvertible
let json: JSON =
["I", "am", "a", "son"]
//Array & Dictionary
var json: JSON =
["name": "Jack", "age": 25, "list": ["a", "b", "c", ["what": "this"]]]
json["list"][3]["what"] = "that"
json["list",3,"what"] = "that"
let path:[JSONSubscriptType] = ["list",3,"what"]
json[path] = "that"青青子衿, 悠悠我心, 但为君故, 沉吟至今
del.icio.us (美味书签)使用指南
  笔者是del.icio.us(美味书签)的老用户。几年前,笔者写过一篇美味书签使用指南。在当时,是我最喜欢的web2.0网站。去年四月,美味书签被YouTube的两位创办人了下来,去年9月他们对网站进行了改版并且重新发布,将原先美味书签的很多功能都去除了,结果引来许多美味书签老用户的。之后几个月他们又进行了更多的调整,把原先去除了的功能重新放回来。  老实说,现在的美味书签从体验上来讲还不如去年,并且国内访问感觉速度非常慢(以至于我每次访问都只能在翻墙的状态下访问),但是,作为一个社会化知识工具(是的,我把它看作是一个知识管理工具,而不仅仅是书签管理工具),它还是有很多优点,而正是这些优点使得像我这样的老用户会对它钟爱有加。  这个使用指南更多是从我个人的使用经验出发,去分享一些心得,会比较注重del.icio.us作为书签收藏以外的其他功能。  好吧,让我们开始奇妙的美味书签之旅。  先说说美味书签能用来干什么吧。  首先,美味书签可以帮助你收藏自己发现或者别人推荐的好网站。  为啥要专门收藏到美味书签上呢?  原因有四点:  第一,随时随地可以访问。哪怕你跑到了天涯海角,并且没有带自己的电脑,但只要你能够上网,在家里、在公司、在网吧或者在南极(假如你有机会去到并且有空在那里上网的话),都能访问得到你收藏过的网站链接。  第二,美味书签可以成为你的私人定制版的搜索引擎。假如你使用美味书签有两个月以上的话,你会发现,直接搜索自己的美味书签收藏,所得出的结果有时候比Google搜索还要准&&那是因为你收藏的是你感兴趣的东西,而且是经过过滤的东西,其含金量自然是更高。  第三,美味书签可以成为你的个人知识管理工具。至于为什么后面的段落会详细论述。  第四,美味书签还有可能成为你的履历表的一部分!这一点也许对记者比较合适,具体是为什么这里就不展开讲了。  具体怎么用美味书签呢?我的使用习惯是分四步走:  collect(收藏):遇到好的东西马上收藏之,哪怕是现在没有时间看,可以留到以后再看。对于那些长篇的文章,你可以在收藏的时候加个&longform&或之类的标签,这样你坐地铁或者有几十分钟空闲时间的时候,正好可以拿出手机来看那些收藏过的长篇文章。  tag(标签):美味书签最大的好处是它的tag功能,尽情的使用吧(甚至中文标签也是支持的)!加了标签之后,你查找自己的收藏或者别人要查看你的收藏都会变得容易很多。你还能点击一个tag,去看看其他用户还收藏了同样标记为这个tag的其他什么网站链接呢。  review(回顾阅读):时不时打开自己的美味书签页面,看看那些你已经收藏的页面当中有哪些你特别喜欢的,而后再看看是不是有其他人也收藏了同一个网页。  当你发现原来还有其他人也收藏了同一个网页时,不妨点击进去,看看这些人都是些什么人。假如你发现有值得关注的用户的话,就马上follow她。(这样下次你看自己的的时候就能看到她们最新收藏的网站了。)  怎么知道某个用户是否值得关注呢?1)看他是否有加标签;2)看他是否有写注释;3)看他是否经常更新;4)看他的用户名(通常那些随便写个用户名的都不值得看,当然这招不是十分靠谱,但有时候却很管用)。  automate(自动化):当你慢慢熟悉了上述这些步骤之后,可以考虑尝试寻找一些办法去将这个过程变得自动化。例如,把你关注的一些美味书签用户的收藏用RSS阅读器来订阅,或者是通过Yahoo Pipes来mash up你正在关注的东西,而后拿Google Reader来订阅。这样子会省下你很多时间。  好了,前面讲了为什么用美味书签,以及怎么用,接下来我想谈谈美味书签到底是什么。  在我看来,美味书签从本质上来讲是一个知识管理工具,另外它也是帮助你创建个性化学习网络()最得力的工具之一。  为什么这么讲?  假如你认真看我前面提到的那个使用美味书签的四部曲,你会发现网址的收藏仅仅是其中的一步,而实际上更为重要的是中间的 tag 和 review 这两步。  假如你是一位充满好奇心的学习者,你一定会很想知道,在我学习的这个领域里,是不是有哪些其他人可以成为我的向导?至少当年我学拉丁文的时候是有非常强烈的这种找到co-learner或mentor的欲望,我很希望有人可以告诉我该看什么、听什么以及是否有前人的经验可以学习。也许在现实生活里因为各种原因你找不到这样的向导,那也没有太大关系,因为你有美味书签。  怎么理解?  例如,你要了解关于公民科学()的方方面面(是的,这玩意)。你看过一个讲这一话题的,并且你用美味书签收藏了这个演讲页面!然后你回到自己的美味书签个人页面,你可以看到刚收藏的这个链接,以及在链接下面的那个小小的数字:22 saves,没错,它告诉你总共有22位用户收藏了这个链接。也许你会好奇,还有哪些人也对这个演讲感兴趣呢?于是你点击&22 saves&,进去之后看到其他收藏了的用户,并且你还能看到其他人写的评注和标签,仔细看下去,你还能发现一位叫&&的用户也收藏了这个链接&&这个会不会就是演讲者本人呢?于是你去Google了一下,而Michael Nielsen的则证实了你的想法。接下来怎么办?马上follow他啊!你可以浏览他最近在阅读些什么,或者可以直接跳进去看他收藏的带&open_science&这个tag的网页有哪些,而后挑选感兴趣的来阅读。这样子慢慢你就会对这个领域有了更多了解,并且是对这个领域的最新动态的了解。而整个过程都是很有机的,充满了各种,十分好玩,甚至会让人上瘾。  你还能用类似的办法,在去国外旅行的时候,找到当地最值得看的东西呢。不信马上试试吧。  &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&  好了,假如我已经抵挡不住美味书签的魅力,马上就去注册一个的话,你能告诉我还有哪些人也在用美味书签吗?  其实用这个的大牛多着呢,简单举几个例子吧(注意,这里列举的有超过一半是TED讲者哦):  Reinventing Discovery的作者  Smart Mobs的作者  Global Voices创办人  We make money not art网站创办人  当然少不了一些国内的用户,例如:  DBAnotes.net博主  Dimension Plus新媒体工作室创办人  假如你新来乍到,不知道怎么用美味书签,不妨多看看这些老用户的收藏,揣摩一下人家什么时候会用美味书签来保存网页链接,以及他们习惯于使用哪些标签。看多了你就会有感觉了。  最后,要提醒大家一点:  务必经常备份你用美味书签保存的书签&&谁知道AVOS公司哪天不会把这网站卖给另外一个不懂什么叫美味书签的公司呢?  怎么备份?  方法一:你可以直接通过美味书签自身提供的服务来备份你的收藏。  方法二:你也可以考虑开设一个的账号,而后将del.icio.us的收藏自动备份过去。(Pinboard.in是一个收费服务,不过它们的服务确实是超一流的,不信你看看他们的就知道了。)  祝大家有一个&美味&的学习体验。  来源:读者投稿,。
  除非注明,文章均为原创,转载请以链接形式标明本文地址
  本文地址:
相关文章:del.icio.us 已死Delicious被Yahoo卖了Delicious变得越来越不好用了大亮
.广告英才网
好东西,继续拜读
这个好东西在国内的体验渣透了,可惜了,我用谷歌只因为速度快
没用过!看了这篇文章觉得还挺不错的勒^_^有机会去试试~
xmarks在用,其他的无视
这个也有中国的mei.fm/beta_shield 只是貌似在内测
好用的东西是我们的索求
我也是delicious的忠实用户,但是前面很长一段时间国内不能访问,现在 访问也很慢
.wangyq123123
求推荐一个好用的网络书签。
之前GR里面推荐不错的,G+出来之后,GR推荐完全残废,哎,GR啊。。。求一个类似书签类工具,有推荐功能最好
我是来吐槽的,能不能不要把delicious翻译成美味书签啊啊啊啊啊
看着非常的堵。。。
这个跟evernote有什么区别。
用chrome不好吗
写的真好!!!!!
这篇文章为投稿,虽有软文色彩,但的确是说了很多实用的地方,对于广大网友还是有用的,值得学习这种方法
.唐吉坷德散热器
今天有幸来美味书签看看。太让我失望了。注册也注册不了。更别说收藏了。怎么使用啊。
直接访问太慢了,自己搞个chrome插件来访问
自从上次delicious大修导致firefox下扩展无法访问书签后就已经转移到gmarks,暂时没有精力再转回去了.
xmarks也不错,可以跨浏览器在机器间同步书签,支持tag标签,可以给网页打分,并整合到搜索结果中。缺陷是用的人没有用delicious的人多,按照标签搜索书签没有delicious好。
Diigo 好得多!bootislands 于
22:28:52 回复请问diigo能缓存书签到本地吗?每次搜索都跑到服务器现搜,好慢啊!以前delicious完胜,现在和googlebookmark,diigo没一家足够好的
以前我也用 delicious ,但是現在速度完全跑不動,今年改投 zootool 去了。
赞助商广告
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.}

我要回帖

更多关于 avro的详细使用方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信