1、,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,生物信息学基础教程,第4讲:正则表示式教程,正则表示式与模式匹配,第1页,第1页,本节内容,正则表示式,正则表示式定义与表示办法,正则表示式中元字符(metacharacter),VIM编辑器,grep命令,sed编辑器,awk工具,第2页,第2页,正则表示式,所谓正则表示式(regular expression,RE),指是符合某种模式字串,惯用于从文献中或者字符串中查找和替换一些符合某种规则字串,第3页,第3页,VIM教程,linux下最惯用文本编辑器,第4页,第4页,VIM编辑器,三种模式:各种模式
2、之间切换,从命令行模式到插入模式:按下i键,从命令行模式到附加模式:按下a键,返回命令行模式:按下ESC键,退出编辑,保留并退出:在命令行模式按下:wq,不保留退出:在命令行模式按下:q!,保留:在命令行模式按下:w,另存为其它文献名:按下:w filename,第5页,第5页,VIM编辑功效,光标跳到文献头:命令行模式下按2下g,光标跳到文献尾:按下:$,光标跳到行首:按下,光标跳到行末:按下$,跳到100行:按下100g,第6页,第6页,VIM查找功效,底行模式下输入/pattern/回车,相应符合pattern文本就会显示为高亮,底行模式下输入:m,n/pattern/,就会在第m行到第
3、n行查找pattern并高亮显示,第7页,第7页,grep教程,正则表示式应用,第8页,第8页,grep简介,是Global search regular expression(RE)and Print out the line缩写,强大文本搜索工具,使用正则表示式搜索文本,并打印匹配行,在一个或者多个文献中搜索字符串模式,搜索结果输出到屏幕,不影响文献内容,第9页,第9页,grep使用办法,grep option pattern input_files,第10页,第10页,惯用grep命令选项,-?,?为数值,同时显示匹配行前后?行,grep-2 grep test.txt同时显示匹配行前后
4、2行,-c,-count,只打印匹配行行数,而不输出匹配行,-f file,从输入文献中提取模式,-i,-ignore-case,忽略大小写,-q,-quiet,取消显示,-l,仅打印匹配模式文献清单,-l,打印不匹配模式文献清单,-n,-line-number,在匹配行前打印行号,-s,-silent,不显示错误信息,-v,-revert-match,只显示不匹配行,-w,-word-regexp,假如被引用,就把表示式作为一个单词搜索,第11页,第11页,grep正则表示式元字符,锚定行开始,grep匹配所有以grep开始行,$,锚定行结束,grep$匹配所有以grep结束行,.,匹配一个
5、非换行符任意字符,gr.p匹配gr后跟一个任意字符,后为p行,*,匹配0个或多个先前字符,*grep匹配所有0个或多个空格紧跟grep行,匹配一个指定范围字符,Ggrep匹配涉及Grep或grep行,匹配不在指定范围内一个字符,A-FH-Zrep匹配所有不在A-F和H-Z范围内字符后跟rep行,(),标识匹配字符,(love)中能够匹配love,且love被标识为1,分别锚定一个单词起始和结束,匹配以grep结束单词,x5,x5,,x5,10,x正好重复5次行、至少重复5次行、重复次数在5-10次之间行,w=A-Za-z0-9,W=A-Za-z0-9,匹配所有单个(非)字母和数字字符,bgre
6、pb,只匹配单词grep,不匹配egrep等,第12页,第12页,练习题:这些命令都能干啥?,ls l|grep a,grep test d*,grep test aa bb cc,grep a-z5 aa,grep w(es)t.*1 aa,grep n datafile,grep 4$datafile,grep 5.datafile,grep.5 datafile,grep wesn datafile,grep A-ZA-Z A-Z datafile,grep ss*datafile,grep a-z9 datafile,grep datafile,第13页,第13页,sed教程,非交互性
7、文本编辑,第14页,第14页,sed简介,首先用which sed查看一下sed位置,一个非交互性文本编辑器,编辑文献或原则输入导出文献拷贝,sed能够随意编辑小文献或者大文献,一次性处理所有改变,高效率,通过行号和正则表示式指定需要编辑行,第15页,第15页,sed使用办法,从文献一个文本行或原则输入中读取数据,并将其拷贝到一个编辑缓冲区,读取命令行或者脚本第一条命令,并用该命令查找模式或定位行号并编辑,重复过程直到命令结束,sed option sed_command input_file,sed option f sed_script_file input_file,sed_script
8、_file option input_file,第16页,第16页,sed命令选项,-n,Quiet,不自动打印编辑行,默认是打印,-e,下一命令是编辑命令,使用多项编辑时加入此选项,-f,其后加sed脚本文献,第17页,第17页,sed定位行号办法,x,行号,指定某一行,x,y,指定x-y范围行,xy,从第x行开始,每隔y行,/pattern/,查询涉及该模式行,x,y!,查询不涉及指定行号x和y行,第18页,第18页,基本sed编辑命令,p,打印匹配行,sed n 2,3p test.txt,sed n/movie/p temp.txt,=,显示文献行号,sed e/music/=temp
9、.txt,a,在定位行号后附加新文本,sed/jack/a“here add new line”p temp.txt,i,在定位行号后插入新文本,sed 4 i“here add new line”p temp.txt,d,删除定位行,sed/music/d temp.txt,n,从另一个文本中读取下一行,并附加到下一行,sed/movie/n temp2.txt temp.txt,c,用新文本替换定位文本,sed 4 c“i like it”temp.txt,s,用替换模式替换相应模式,sed s/source/okstr/”add before”&/p temp.txt,r,从另一个文本中
10、读取文本,sed/name/r temp2.txt temp.txt,w,写文本到另一个文献,sed s/name/”my”&/w temp2.txt temp.txt,第19页,第19页,练习题:这些命令能干什么?,sed s/.$/g temp.txt,sed e/abcd/d temp.txt,sed s/*/g temp.txt,sed s/*/g temp.txt,sed s/.*/g temp.txt,sed/$/d temp.txt,sed s/./g temp.txt,sed s/COL()/g temp.txt,sed s/g temp.txt,第20页,第20页,AWK教程
11、,文献模式提取教程,第21页,第21页,AWK简介,Linux下awk有三个版本:awk、nawk、gawk,普通所说awk是指,/bin/awk,,也就是,gawk(GNU awk),awk功效:,基于指定规则从文献或者字符串中分解抽提信息,基于指定规则输出数据,第22页,第22页,awk三种执行方式,awk option awk_script input_file1 input_file2,将awk_script放入脚本文献并以,#!/bin/awk f,作为首行,并赋予该脚本可执行权限,然后在shell下调用该脚本名称执行awk_script内容:,awk_file input_file
12、,将所有awk_script放入一个单独脚本文献,然后用,awk f awk_file input_file(s),执行脚本,第23页,第23页,awk脚本构成,可由一条或多条,awk_cmd,构成,两条,awk_cmd,之间普通以,NEWLINE,分割,awk_cmd由两部分构成:,awk_pattern actions,awk命令普通形式,awk BEGIN actions awk_pattern1 actions awk_patternN actions END actions input_file,其中BEGIN 和END模块是可选,第24页,第24页,awk脚本运营机制,假如存在BE
13、GIN区块,执行其中actions,从输入文献中读取一行,称为读入一条统计,将读入统计按照分隔符(,FS/IFS,)分割为多个字段,依次为,$1,,,$2,,.,而,$0,表示整条统计。,将当前输入统计与,awk_pattern,相比较,假如匹配则执行actions,假如不匹配则跳过读入下一条统计,重复执行3,4,直到文献尾,awk把输入文献数据读入内存,然后操作内存中输入数据副本,不会修改输入文献内容,awk总是输出到原则输出,假如需要输出到文献,可采用重定向,第25页,第25页,awk_pattern格式,正则表示式,/regexp/,通用正则元字符:$.|()*,+是awk特有元字符,匹
14、配其前单个字符一次以上,?也是awk特有元字符,匹配其前单字符0/1次,举例:,awk/*$0.0-90-9.*/input_file,布尔表示式,“=”,“”,“/regexp/”,“&”,“|”,举例,awk$3 /d/input_file,awk($1 10)print ok input_file,第26页,第26页,actions格式,actions是对awk读取统计进行操作,actions由一条或多条语句或命令构成,语句之间用分号分隔,第27页,第27页,awk命令,print“$1=”,$1,printf:与c语言printf类似,next:读取下一条统计并处理,nextfile:
15、读取文献列表下一个文献,exit:awk停止执行并跳出。假如有END存在,awk会执行ENDactions,第28页,第28页,awk语句,赋值语句,awk BEGIN x=1;y=3;x=y;print x=x ;y=y,awk BEGIN x=3;x+=2;y=x+2;print x=x ;y=y,流程控制结构,if(condition)then-body else else-body,while(condition)body,do body while(condition),for(initialization;condition;increment)body 与C语言for结构语法相同
16、,break:跳出包括它for、while、do-while 循环,continue:跳过for、while、do-while循环body剩余部分,而立刻进行下一次循环执行,第29页,第29页,awk内部变量,自动内部变量,NF,:当前输入字段字段数,NR,:当前输入文献已经被读过行数,FNR,:所有输入文献中已经被读过行数,FILENAME,:当前输入文献文献名,ARGC,:命令行参数个数,输入文献数目+1,ARGIND,:当前处理文献在ARGV内索引,字段变量:$1,$2,$NF,$0,其它内部变量,FS,:输入统计字段分隔符(默认是空格和制表符),OFS,:输出统计字段分隔符(默认是空格
17、),OFMT,:数字输出格式(默认是%.6g),RS,:输入统计间分隔符(默认是NEWLINE)ORS:输出统计间分隔符(默认是NEWLINE),ARGV,:命令行参数数组 ENVIRON:存储系统当前环境变量值数组,它每个组员索引就是一个环境变量名,举例:,cat/etc/passwd|awk BEGIN FS=:print User name:$1,UID:$4,第30页,第30页,awk自定义变量,定义变量:,varname=value,表示式中不带引号字符串即被视为变量,假如之前未被赋值,默认值为0或“”,使用办法:,awk awk_script awkvar1=value1 awkv
18、ar2=value2.input_file,优先级:awk_script中变量定义优先于命令行中变量定义,假如需要调用shell变量,能够采用,awk awk_script awkvar1=shellvar1 awkvar2=shellvar2.input_file,第31页,第31页,awk内置函数,数值函数:,int(x),sqrt(x),exp(x),log(x),sin(x),cos(x),atan2(y,x),rand(),srand(x),srand(),字符串函数:,index(in,find),length(s),match(s,r),sprintf(),sub(p,r,t),
19、gsub(p,r,t),substr(str,st,len),split(s,a,fs),tolower(str),toupper(str),系统函数:,close(filename),system(command),第32页,第32页,awk自定义函数,自定义函数格式:,function fun_name(param_list)function_body,举例:,awk print“sum=”,SquareSum($1,$2)function SquareSum(x,y)sum=x*x+y*y;return sum grade.txt,第33页,第33页,awk数组,访问数组元素,for(e
20、lement in array_name)print array_nameelement,举例:,awk BEGINprint split(“123#456#789”,mya,“#”);for(i in mya)print myai,第34页,第34页,避免awk错误办法,确保整个awk_script用单引号括起来,确保awk_script内所有引号成对出现,确保用花括号括起动作语句,用圆括号括起条件语句,也许忘掉使用花括号,也许你认为没有必要,但awk不这样认为,将按之解释语法,假如使用字符串,一定要确保字符串被双引号括起来(在模式中除外),第35页,第35页,2)在awk中,设置故意义变量
21、名是一个好习惯,在进行模式匹配或关系操作时更容易理解。普通变量名设置方式为name=$n,3)通常在BEGIN部分给一些变量赋值是很有益,这样能够在awk表示式进行改动时减少诸多麻烦,4)awk基本功效是依据指定规则抽取输入数据部分内容并输出,另一个主要功效是对输入数据进行分析运算得到新数据并输出,这是通过在 awk_script中对字段变量($1、$2、$3.)重新赋值或使用更大字段变量$n(n不小于当前统计NF)而实现,5)使用字符串或正则表示式时,有时需要在输出中加入一新行或查询一元字符。这时就需要字符串屏蔽序列。awk中经常使用屏蔽序列有:b 退格键 t tab键 f 走纸换页 ddd
22、 八进制值 n 新行 r 回车键 c 任意其它特殊字符。eg:为反斜线符号,第36页,第36页,awk输出函数printf,格式:printf(输出模板字符串,参数列表),参数列表是以逗号分隔列表,参数能够是变量、数值或字符串。,输出模板字符串字符串中必须包括格式控制符,有几种参数就要求有几种格式控制符。模板字符串中能够只有格式控制符而没有其它字符。,格式控制符:%-width.precfmt%:标识一个格式控制符开始,不可省略。-:表示参数输出时左对齐,可省略。width:一个数字,表示参数输出时占用域宽度,可省略。.prec:prec是一个数值,表示最大字符串长度或小数点右边位数,可省略。
23、fmt:一个小写字母,表示输出参数数据类型,不可省略。,常见fmt:c ASCII字符,d 整数,e 科学记数法浮点数,f 浮点数,如 123.44 g 由awk决定使用哪种浮点数转换e或f,o 八进制数,s 字符串,x 十六进制数,举例:,echo 65|awk printf(%cn,$0),/将打印 A,awk BEGINprintf%.4fn,999,/将打印 999.0000,awk BEGINprintf 2 number:%8.4f%8.2f,999,888,/将打印 2,/number:999.0000 888.000,第37页,第37页,总结,sed适合处理整行文本,awk适合处理下面格式文献,col1col2col3col4,更复杂文本可通过结合sed和awk进行处理,或者通过其它更高级脚本语言如perl/python进行处理,记住:C/C+不适合用来处理文本或字符串,因此,掌握1-2种脚本语言对于生物信息学来说,是非常有必要,第38页,第38页,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100