#基因组干货# 生物信息学文本处理大杂烩(一)

文本处理是生物信息学中的一个重要步骤,但我一般是不太关心数据结构,也不关心使用什么方法什么语言,只要能将文件中的信息快狠准的提取出来就行了,毕竟精力有限,数据的生物学意义远比数据提取方法重要。在文本处理中我个人的习惯是什么方便用什么,比如不规则文本提取用grep/awk正则匹配提取,规则且量不大的数字数据表用R,大量序列数据用python,啥方便啥来。原则有两个,代码越短小越好,提取速度越快越好,总而言之就是追求短小快。个人认为在生物信息学里,没有最好的语言,只有最合适的语言,各种脚本语言都得会那么一点。

1. awk大法好

我个人最喜欢awk的一点就是不需显式读入文件,而perl/python/R/java,都需要读入文件然后赋值给变量,还得申明变量类型,处理好了还得写个输出,麻烦的很。但awk 不需要啊,数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出,完事后直接">"输出到文件,省事。再搭配awk内置的变量/函数数组,以及与shell其他命令搭配,简直没有解决不了的文本处理问题。

下面是个处理bed格式的实例:
# 首先安装bedtools为的是获得随机bed文件:
sudo apt-get install bedtools
# 使用bedtools的randomBed获得1000条随机bed 位置:
randomBed -seed 2 -n 1000 -l 400 -g ./hg19.chrom_24.sizes >./a.bed

说明:hg19.chrom_24.sizes是基因组size文件,是使用UCSC 的fetchChromSizes(从这里下载:http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/) 程序下载或者自己编辑也可以,格式如下:

#基因组干货# 生物信息学文本处理大杂烩(一)_第1张图片

#查看随机序列:
head a.bed

说明:前三列是位置信息,第四列是命名,这里是按照行号来命名的,第五列是长度,最后一列是正负链。

#基因组干货# 生物信息学文本处理大杂烩(一)_第2张图片

下面进行操作,首先是排序:

# 使用sort首先按照正负链,其次是染色体,最后是位置信息排序:
sort -k 6,6 -k 1,1 -k 2n,2 ./a.bed -o ./a.bed

说明:sort 函数有很多参数,-k是按域排序,先按照第六列链排序,然后是染色体第一列,然后是位置信息第二列,第二列是以数字排序,所以要加n。结果如下:

#基因组干货# 生物信息学文本处理大杂烩(一)_第3张图片

使用awk 提取指定染色体信息:

# 只提取chr1的信息:
awk 'BEGIN{FS="\t";OFS="\t"}{if($1=="chr1")print }' a.bed|tail

说明:BEGIN是文件处理前的操作,FS表示定义文件分割,这里是制表符,OFS是定义输出的分割符;$1代表第一列数据。

# 只提取chr1正链的信息:
awk 'BEGIN{FS="\t";OFS="\t"}{if($1=="chr1" && $6=="+")print }' a.bed|tail

说明:多加个条件就行了。


上面简单的提取功能awk 就是一行实现,而其他的如perl/python脚本需要好几行才能实现。后面介绍对gtf文件的处理以及多文文件比对处理,perl/python处理要复杂很多,而awk只需一行。
更多原创精彩内容敬请关注生信杂谈

#基因组干货# 生物信息学文本处理大杂烩(一)_第4张图片

你可能感兴趣的:(#基因组干货# 生物信息学文本处理大杂烩(一))