linux三剑客
awk、sed、grep通常被称作linux中的三剑客,得益于它们在处理文本数据时的高效性和便捷性。通过配合linux中管道符|将三个命令组合使用,几乎能够处理日常中大部分文本数据和需求。本文将介绍一些生物数据分析过程中常常会使用到的组合命令,如果文章篇幅比较长可以通过ctrl + F关键字搜索对应的代码。
安利一个网站,能够很方便的解析你给出的linux命令和对应的参数,不过解释都是全英文的(哈哈哈)还能提高英语水平。相比与linux中通过man awk来一个一个找参数看的话会更加方便一些。

awk
1.常用到的一些参数介绍:
-F参数定义输入文件分隔符,默认是空白;比如定义分隔符为
;需要awk -F ";"NF输入文件对应的列的数目
NR输入文件对应行的数目
OFS定义输出文件中列与列之间的分割符,例如定义TAB分隔符
OFS="\t"
2.awk中正则表达式介绍:
例如输出第一列含有hello字符的内容。
对正则表达式不了解的同学可以看这篇文章的笼统介绍,当然想要更加深入的了解,还是得自己动手加上书本的知识。
awk '$1~/hello/{print $1}' 输入文件3.常见的函数
gsub对某一个字段进行正则匹配,返回匹配的字符index返回字符窜在字段的位置length返回字符串长度split将字符进行分割,分割后存进指定的数组内substr截取字符串
sed
grep
实用的组合命令
从gff文件中提取gene坐标bed文件
awk '$3~/gene/{print $1,$4,$5,$9}' OFS="\t" Gbarbadense_gene_model.gff3|awk -F ";" '{print $1}' |sed 's/ID=//g' >gene.bed提取基因上下游3000bp启动子区域
awk -F ";" '{print $1}' ../../Ghirsutum_gene_model.gff3|awk -F "\t" '$3~/gene/&&$7=="-"{print $1,$5+1,$5+3000,$9}$3~/gene/&&$7=="+"{if($4>3000){print $1,$4-3000,$4-1,$9}else{print $1,1,$4-1,$9}}' OFS="\t" |sed 's/ID=//g' >gene_promter.bedLast updated
Was this helpful?