关于perl6的若干问题?

20年磨一剑,在perl人艰苦卓绝的努力下,perl 6终于在2016年圣诞节推出了正式版本V6.c版本(c代表圣诞节)。 期间几度波折,很多事情也都发生了。比如,perl6 最先成型的pogs版本主程台湾大牛大牛唐宗汉易性为唐凤,另IT界叹为观止。

20年积累了宇宙巨能的perl6究竟有啥黑科技?本文借自perl6官方的faq,翻译成中文,以帮助我们揭开perl6的潘多拉宝盒。

笔者计划一项perl6doc中文化的项目,这篇文章为perl6doc中文化的第一个成果,如果有什么纰漏和错误,请帮助我指出 。另外有志于学习perl6和参与项目的同仁也大大的欢迎哦。

项目的地址为https://github.com/bollwarm/perl6doc

继续阅读

生信单行脚本

单行脚本处理生信息常见脚本

Basic awk & sed

[返回顶部]

提取文件中的2, 4, and 5 列:

输出第五列等于abc123的行:

输出第五列不是abc123的行:

输出第七列以字母a-f开头的行:

输出第七列不是以字母a-f开头的行:

计算第二列不重复的值保存在哈希arr中 (一个值只保存一次):

输出第三列的值比第五列大的行:

计算文件中第一列的累加值,输出最后的结果:

计算第二列的平均值:

用bar替换文件中所有的foo:

消除行开头空和格制表符:

消除行结尾的空格和制表符:

消除行中开头和结尾的空格和制表符:

删除空行:

删除包含‘EndOfUsefulData’的行及其后所有的行:

awk & sed for bioinformatics

生信单行sed,awk

[返回]

Returns all lines on Chr 1 between 1MB and 2MB in file.txt. (assumes) chromosome in column 1 and position in column 3 (this same concept can be used to return only variants that above specific allele frequencies):

输出Chr为1在1M和2M之间的所有行。(假设)染色体在第一列,位点在第三列(基于同样的假设可以用来返回类似特定等位基因频率的变异)

Basic sequence statistics. Print total number of reads, total number unique reads, percentage of unique reads, most abundant sequence, its frequency, and percentage of total in file.fq: 基本序列统计。输出总的reads数,不重复的reads总数,不重复reads百分比,最大冗余的序列及其频度以及总占比百分数。

转换.bam为.fastq:

Keep only top bit scores in blast hits (best bit score only): 只取blast采样中的顶级位点的分数(最高的位点分)

Keep only top bit scores in blast hits (5 less than the top): 只取blast采样中的顶级位点的分数(比顶级少于5的)

分割多序列FASTA文件为单序列FASTA文件

输出fasta文件中的每条序列的序列名称和长度

转化FASTQ文件为FASTA:

从第二行开始每四行取值(从FASTQ文件提取序列)。

输出中剔除第一行:

输出20-80行:

计算二,三行列的和并追加到每行后输出

计算fastq文件平均reads的长度

转化VSF文件为BED文件

sed -e ‘s/chr//’ file.vcf | awk ‘{OFS=”\t”; if (!/^#/){print $1,$2-1,$2,$4″/”$5,”+”}}’

sort, uniq, cut, etc.

[返回开头]

输出带行号的内容:

去重复行计数

找到两文件都有的行(假设两个文件都是无重复行,重定向执行‘wd -l’计算同样行的行数)

对文件按照第九列数字顺序排序(g按照常规数值,k列)

找到第二列出现最多的字符串

从文件中随机取10行

输出所有三个所可能的DNA序列

Untangle an interleaved paired-end FASTQ file. If a FASTQ file has paired-end reads intermingled, and you want to separate them into separate /1 and /2 files, and assuming the /1 reads precede the /2 reads:

解开一列交错paired-end fastq文件。如果fastq文件有乱序paired-end reads,你想将其分离成单独的/1,/2的文件保存,这里假设/1 reads 在/2 前面:

Take a fasta file with a bunch of short scaffolds, e.g., labeled >Scaffold12345, remove them, and write a new fasta without them:

将一个fasta文件转成一系列短的scaffolds。比如,标签 “>Scaffold12345″,然后移出他们,保存一个去掉他们的新文件:

Display hidden control characters:

显示一个隐藏的控制字符:

find, xargs, and GNU parallel

[返回]

通过 https://www.gnu.org/software/parallel/. 载 GNU parallel

搜索文件夹及其子目录中名称为 .bam 文件(目录也算):

删除上面搜到的文件列表(不可逆的危险操作,谨慎使用!删除之前请自习确认)

将所有.txt 文件修改为.bak(例如在对*.txt做操作之前用于文件备份)

Chastity filter raw Illumina data (grep reads containing :N:, append (-A) the three lines after the match containing the sequence and quality info, and write a new filtered fastq file):

对Illumina数据做Chastity过滤(grep 查询 包含:N:,用(-A)选项第三列信息附加在匹配的包含一个序列质量信息后,并保存为一个新的fasta文件)

通过parallel并行运行12个FASTQC任务

通过parallel给bam做索引,通过--dry-run打印测试这些命令,实际上并未做执行。 find *.bam | parallel –dry-run ‘samtools index {}’

seqtk

[back to top]

  • Seqtk项目托管地址https://github.com/lh3/seqtk。Seqtk是一个快捷轻量的处理FASTA和FASTQ格式基因序列的工具。他可以是先FASTA和FASTQ无缝处理和转化,同时支持gzip格式的压缩文件。

把FASTQ转化为FASTA:

Convert ILLUMINA 1.3+ FASTQ to FASTA and mask bases with quality lower than 20 to lowercases (the 1st command line) or to N (the 2nd):

转化ILLUMINA 1.3+ 格式FASTQ为FASTA,并且以小于20的mask bases获得小写字母(第一命令行)或者到N(第二)。 seqtk seq -aQ64 -q20 in.fq > out.fa seqtk seq -aQ64 -q20 -n N in.fq > out.fa

Fold long FASTA/Q lines and remove FASTA/Q comments:

折叠长FASTA/Q行,并且去除其注释:

Convert multi-line FASTQ to 4-line FASTQ: 转化多行FASTQ到四行FASTQ:

Reverse complement FASTA/Q: 反转FASTA/Q序列:

Extract sequences with names in file name.lst, one sequence name per line: 用序列文件中的名称(比如name.1st)提取序列,一个虚列名一行:

Extract sequences in regions contained in file reg.bed: 利用序列文件中的”reg.bed“r信息提取地理信息的序列:

Mask regions in reg.bed to lowercases: 编码‘reg.bed’地理信息到小写

Subsample 10000 read pairs from two large paired FASTQ files (remember to use the same random seed to keep pairing): 从两个大的paired FASTQ文件提取10000个read pairs(记得用同样的随机种子保持 paire)

Trim low-quality bases from both ends using the Phred algorithm: 利用Phred公式从两头修剪低质量bases:

Trim 5bp from the left end of each read and 10bp from the right end: 从左端修剪5bp,从右端修剪10bp的。

Untangle an interleaved paired-end FASTQ file. If a FASTQ file has paired-end reads intermingled, and you want to separate them into separate /1 and /2 files, and assuming the /1 reads precede the /2 reads: 解开一个交错的paired-end FASTQ文件。如果FASTQ文件包含混合的 paired-end reads,如果你想把他们分离成/1,/2文件(假设/1 read在/2 read的前面): seqtk seq -l0 -1 interleaved.fq > deinterleaved_1.fq seqtk seq -l0 -2 interleaved.fq > deinterleaved_2.fq

GFF3 Annotations

[back to top]

Print all sequences annotated in a GFF3 file. 输出GFF3文件中标注的所有的序列

Determine all feature types annotated in a GFF3 file. 检测GFF3文件中标注的所有性状类型。

Determine the number of genes annotated in a GFF3 file. 检测GFF3文件中标注的基因数量。

Extract all gene IDs from a GFF3 file. 从GFF3文件中提取所有的基因ID

Print length of each gene in a GFF3 file. 输出GFF3文件每个基因的长度

FASTA header lines to GFF format (assuming the length is in the header as an appended “_length” as in Velvet assembled transcripts): FASTA头列转化为GFF格式(假设头的长度,附加在”_length“ ,和Velvet assembled transcripts))

Other generally useful aliases for your .bashrc

有用的别名(.bashrc)

[back to top]

提示符修改为user@hostname:/full/path/cwd/:$形式

避免反复敲诸如cd ../../..的命令(也可以用[autojump](https://github.com/joelthelion/autojump),让你在飞速的转换目录

向前和向后浏览

覆盖文件时候,先确认

我最喜欢的”ls“别名

对cut空格和逗号,分割文件

解压缩tar包

或者可以用更普遍的‘extract’函数

使用别名”mcd”创建一个目录,并且cd到该目录

跳转到上级目录,并且列出其内容

一个好看的grep

刷新你的.bashrc

编辑你的.bashrc

常用错误别称

使用 pandoc转化markdown文档为PDF格式:

对当前目录搜索关键词(ft "mytext" *.txt):

Etc

[返回]

重复运行上一条命令:

列出最近最常用的命令行参数(通常是文件)

敲出了部分命令,删除这些输入,查你忘记的明亮,拉回命令,继续输入(<CTRL+u>删除光标之前的输入,<CTRL+y>恢复上个C-U删除字符)

跳到一个目录,执行命令,然后返回当前目录(()的用法)

记时秒表 (输入Enter or ctrl-d 停止):

把上次执行的命令生成一个脚本

重用上次命令的所有参数

列出或者删除一个目录中所有不匹配的特定后缀的文件(例如,列出所有不是压缩的文件,删除所有不以.foo和.bar后缀的文件)

利用上次的命令,但是不需要他的的参数(重新输入参数):

激活一个快捷的编辑器,输入,编辑长的,复杂,巧妙的命令:

输出一个特定的行(比如 42行)

终结一个冻结的ssh session(会车换行,敲~键,在敲下.键)

利用grep去除文件的空行,结果保存到新文件

查找大文件(例如,大于500M的)

利用截取列(例如,一个tab分割文件的第五个域)

查找包含特定字符的文件(-l 只输出文件名, -i 忽略大小写 -r 遍历子目录)

网站目录防篡改程序,perl web目录md5文件验证

有时候站点,有bug,很容易会被人修改,添加其他乱七八糟的东西,针对这类问题,常见的做法:1、修改升级程序漏洞。2、用WAF主动防御(用第三方免费cdn,也提供这类防御)。

这儿介绍第三种方法(如果网站固定文件不变的情况下)
网站部署好后,通过对站点所有文件的计算MD5值,并保存在一个文件中。然后以后可以手动或者crontab,监控程序等定期对保存文件中的文件生成md5值和已有的md5值对比,如果发现值对不上,则说明文件被篡改了。

继续阅读

利用 Schwartzian Transform(施瓦茨变换) 进行排序

Schwartzian Transform(施瓦茨变换) 是perl中一种高效的排序算法 ,详见http://en.wikipedia.org/wiki/Schwartzian_transform
在平时工作中,会有非常复杂的排序需求,比如,对文件所有的含有/RE/的行,按第一列升序,再按第二列降序排,…
诸如此类的排序,利用施瓦茨变换可以事半功倍。
施瓦茨变换的一般格式如下:

继续阅读

大数据时代 数据挖掘十大经典算法

国际权威的学术组织theIEEEInternationalConferenceonDataMining(ICDM)2006年12月评选出了数据挖掘领域的十大经典算法:C4.5,k-Means,SVM,Apriori,EM,PageRank,AdaBoost,kNN,NaiveBayes,andCART.

不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影响。
继续阅读

/zz/ 海量数据处理 算法总结

前面我们说海量数据处理提到,从算法的角度去考虑处理海量数据。

1. Bloom Filter

【Bloom Filter】
Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。它是一个判断元素是否存在集合的快速的概率算法。Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元素不再集合,那肯定不在。如果判断元素存在集合中,有一定的概率判断错误。因此,Bloom Filter不适合那些“零错误”的应用场合。

而在能容忍低错误率的应用场合下,Bloom Filter比其他常见的算法(如hash,折半查找)极大节省了空间。

Bloom Filter的详细介绍:海量数据处理之Bloom Filter详解
继续阅读

/zz/谷歌三大论文(三)Google BigTable中文版

 

Bigtable:一个分布式的结构化数据存储系统

译者:alex

摘要

Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance。这些应用对Bigtable提出的要求差异非常大,无论是在数据量上(从URL到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对Google的这些产品,Bigtable还是成功的提供了一个灵活的、高性能的解决方案。本论文描述了Bigtable提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的分布和格式;我们还将描述Bigtable的设计和实现。

继续阅读

/zz/谷歌三大论文(二)Google MapReduce中文版

Google MapReduce中文版
译者: alex

摘要
MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一个Map函数处理一个基于key/value pair的数据集合,输出中间的基于key/value pair的数据集合;然后再创建一个Reduce函数用来合并所有的具有相同中间key值的中间value值。现实世界中有很多满足上述处理模型的例子,本论文将详细描述这个模型。

MapReduce架构的程序能够在大量的普通配置的计算机上实现并行化处理。这个系统在运行时只关心:如何分割输入数据,在大量计算机组成的集群上的调度,集群中计算机的错误处理,管理集群中计算机之间必要的通信。采用MapReduce架构可以使那些没有并行计算和分布式处理系统开发经验的程序员有效利用分布式系统的丰富资源。

我们的MapReduce实现运行在规模可以灵活调整的由普通机器组成的集群上:一个典型的MapReduce计算往往由几千台机器组成、处理以TB计算的数据。程序员发现这个系统非常好用:已经实现了数以百计的MapReduce程序,在Google的集群上,每天都有1000多个MapReduce程序在执行。

继续阅读

/zz/谷歌三大论文(一)The Google File System中文版

The Google File System中文版

译者:alex

摘要

我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。
虽然GFS的设计目标与许多传统的分布式文件系统有很多相同之处,但是,我们的设计还是以我们对自己的应用的负载情况和技术环境的分析为基础 的,不管现在还是将来,GFS和早期的分布式文件系统的设想都有明显的不同。所以我们重新审视了传统文件系统在设计上的折衷选择,衍生出了完全不同的设计 思路。
GFS完全满足了我们对存储的需求。GFS作为存储平台已经被广泛的部署在Google内部,存储我们的服务产生和处理的数据,同时还用于那些 需要大规模数据集的研究和开发工作。目前为止,最大的一个集群利用数千台机器的数千个硬盘,提供了数百TB的存储空间,同时为数百个客户机服务。
在本论文中,我们展示了能够支持分布式应用的文件系统接口的扩展,讨论我们设计的许多方面,最后列出了小规模性能测试以及真实生产系统中性能相关数据。

继续阅读