1、生物信息学基础教程1感谢你的观看2019年8月28本节内容本节内容n正则表达式n正则表达式的定义与表示方法n正则表达式中的元字符(metacharacter)nVIM编辑器ngrep命令nsed编辑器nawk工具2感谢你的观看2019年8月28正则表达式n所谓正则表达式(regular expression, RE), 指的是符合某种模式的字串,常用于从文件中或者字符串中查找和替换某些符合某种规则的字串3感谢你的观看2019年8月28VIM教程linux下最常用的文本编辑器4感谢你的观看2019年8月28VIM编辑器n三种模式:各种模式之间切换n从命令行模式到插入模式:按下i键n从命令行模式到
2、附加模式:按下a键n返回命令行模式:按下ESC键n退出编辑n保存并退出:在命令行模式按下:wqn不保存退出:在命令行模式按下:q!n保存:在命令行模式按下:wn另存为其他文件名:按下:w filename5感谢你的观看2019年8月28VIM编辑功能n光标跳到文件头:命令行模式下按2下gn光标跳到文件尾:按下:$n光标跳到行首:按下n光标跳到行末:按下$n跳到100行:按下100g6感谢你的观看2019年8月28VIM查找功能n底行模式下输入/pattern/回车,对应符合pattern的文本就会显示为高亮n底行模式下输入:m,n/pattern/,就会在第m行到第n行查找pattern并高亮
3、显示7感谢你的观看2019年8月28grep教程教程正则表达式的应用8感谢你的观看2019年8月28grep简介n是Global search regular expression (RE) and Print out the line的缩写n强大的文本搜索工具,使用正则表达式搜索文本,并打印匹配的行n在一个或者多个文件中搜索字符串模式,搜索的结果输出到屏幕,不影响文件内容9感谢你的观看2019年8月28grep用法ngrep option pattern input_files10感谢你的观看2019年8月28常用常用grep命令选项命令选项-?为数值,同时显示匹配行的前后?行grep -2
4、 grep test.txt同时显示匹配行的前后2行-c-count,只打印匹配行的行数,而不输出匹配行-f file从输入文件中提取模式-i-ignore-case,忽略大小写-q-quiet,取消显示-l仅打印匹配模式的文件清单-l打印不匹配模式的文件清单-n-line-number,在匹配行前打印行号-s-silent,不显示错误信息-v-revert-match,只显示不匹配的行-w-word-regexp,如果被引用,就把表达式作为一个单词搜索11感谢你的观看2019年8月28grep正则表达式元字符正则表达式元字符锚定行的开始grep匹配所有以grep开始的行$锚定行的结束grep
5、$匹配所有以grep结束的行.匹配一个非换行符的任意字符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-9W=A-Za-z0-9匹配所
6、有单个(非)字母和数字字符bgrepb只匹配单词grep,不匹配egrep等12感谢你的观看2019年8月28练习题:这些命令都能干啥?1.ls l | grep a2.grep test d*3.grep test aa bb cc4.grep a-z5 aa5.grep w(es)t.*1 aa6.grep n datafile7.grep 4$ datafile8.grep 5. datafile9.grep .5 datafile10.grep wesn datafile11.grep A-ZA-Z A-Z datafile12.grep ss* datafile13.grep a-z
7、9 datafile14.grep datafile13感谢你的观看2019年8月28非交互性文本编辑非交互性文本编辑14感谢你的观看2019年8月28sed简介n首先用which sed查看一下sed的位置n一个非交互性文本编辑器,编辑文件或标准输入导出的文件拷贝nsed可以随意编辑小文件或者大文件n一次性处理所有改变,高效率n通过行号和正则表达式指定需要编辑的行15感谢你的观看2019年8月28sed用法n从文件的一个文本行或标准输入中读取数据,并将其拷贝到一个编辑缓冲区n读取命令行或者脚本的第一条命令,并用该命令查找模式或定位行号并编辑,重复过程直到命令结束nsed option sed
8、_command input_filensed option f sed_script_file input_filensed_script_file option input_file16感谢你的观看2019年8月28sed命令的选项-nQuiet, 不自动打印编辑行,默认是打印的-e下一命令是编辑命令,使用多项编辑时加入此选项-f其后加sed脚本文件17感谢你的观看2019年8月28sed定位行号的方法 x行号,指定某一行 x, y指定x-y范围的行 xy从第x行开始,每隔y行 /pattern/查询包含该模式的行 x,y!查询不包含指定行号x和y的行18感谢你的观看2019年8月28基本
9、sed编辑命令p打印匹配行sed n 2,3p test.txtsed n /movie/p temp.txt=显示文件行号sed e /music/= temp.txta在定位行号后附加新文本sed /jack/ a “here add new line”p temp.txti在定位行号后插入新文本sed 4 i “here add new line”p temp.txtd删除定位行sed /music/d temp.txtn从另一个文本中读取下一行,并附加到下一行sed /movie/n temp2.txt temp.txtc用新文本替换定位文本sed 4 c “i like it” te
10、mp.txts用替换模式替换相应模式sed s/source/okstr/”add before” &/p temp.txtr从另一个文本中读取文本sed /name/r temp2.txt temp.txtw写文本到另一个文件sed s/name/”my ” &/w temp2.txt temp.txt19感谢你的观看2019年8月28练习题:这些命令能干什么?sed s/.$/g temp.txtsed e /abcd/d temp.txtsed s/ */ /g temp.txtsed s/*/g temp.txtsed s/.*/g temp.txtsed /$/d temp.txts
11、ed s/./g temp.txtsed s/COL()/g temp.txtsed s/g temp.txt20感谢你的观看2019年8月28文件模式提取教程文件模式提取教程21感谢你的观看2019年8月28AWK简介简介nLinux下的awk有三个版本:awk、nawk、gawk,一般所说的awk是指/bin/awk,也就是gawk (GNU awk)nawk的功能:n基于指定规则从文件或者字符串中分解抽提信息n基于指定的规则输出数据22感谢你的观看2019年8月28awk的三种执行方式1.awk option awk_script input_file1 input_file2 2.将a
12、wk_script放入脚本文件并以#!/bin/awk f 作为首行,并赋予该脚本可执行权限,然后在shell下调用该脚本名称执行awk_script的内容:awk_file input_file3.将所有awk_script放入一个单独的脚本文件,然后用awk f awk_file input_file(s)执行脚本23感谢你的观看2019年8月28awk脚本的组成n可由一条或多条awk_cmd组成,两条awk_cmd之间一般以NEWLINE分割nawk_cmd由两部分组成:awk_pattern actions nawk命令的一般形式awk BEGIN actions awk_patter
13、n1 actions awk_patternN actions END actions input_file其中BEGIN 和END模块是可选的24感谢你的观看2019年8月28awk脚本的运行机制1.如果存在BEGIN区块,执行其中的actions2.从输入文件中读取一行,称为读入一条记录3.将读入的记录按照分隔符(FS/IFS)分割为多个字段,依次为$1,$2,., 而$0表示整条记录。4.将当前输入记录与awk_pattern相比较,如果匹配则执行actions,如果不匹配则跳过读入下一条记录,重复执行3,4,直到文件尾5.awk把输入文件的数据读入内存,然后操作内存中的输入数据副本,不
14、会修改输入文件的内容6.awk总是输出到标准输出,如果需要输出到文件,可采用重定向25感谢你的观看2019年8月28awk_pattern的格式1.正则表达式 /regexp/通用的正则元字符: $ . | () *+是awk特有的元字符,匹配其前的单个字符一次以上?也是awk特有的元字符,匹配其前的单字符0/1次举例:awk /*$0.0-90-9.*/ input_file2.布尔表达式 “=”,“”, “/regexp/”,“&”, “|”举例awk $3 /d/ input_fileawk ($1 10) print ok input_file 26感谢你的观看2019年8月28act
15、ions的格式nactions是对awk读取记录进行的操作nactions由一条或多条语句或命令组成,语句之间用分号分隔27感谢你的观看2019年8月28awk命令print “$1= ”, $1printf:与c语言的printf类似next:读取下一条记录并处理nextfile:读取文件列表的下一个文件exit:awk停止执行并跳出。如果有END存在,awk会执行END的actions28感谢你的观看2019年8月28awk语句n赋值语句awk BEGIN x=1 ; y=3 ; x=y ; print x= x ; y= y awk BEGIN x=3 ; x+=2 ; y=x+2 ;
16、print x= x ; y= y n流程控制结构 if (condition) then-body else else-body while (condition) body do body while (condition) for (initialization; condition; increment) body 与C语言的for结构的语法相同 break : 跳出包含它的for、while、do-while 循环 continue : 跳过for、while、do-while循环的body的剩余部分,而立刻进行下一次循环的执行29感谢你的观看2019年8月28awk内部变量n自动内
17、部变量自动内部变量NF:当前输入字段的字段数NR:当前输入文件已经被读过的行数FNR:所有输入文件中已经被读过的行数FILENAME:当前输入文件的文件名ARGC:命令行参数个数,输入文件数目+1ARGIND:当前处理文件在ARGV内的索引n字段变量:字段变量:$1, $2, , $NF, $0n其他内部变量其他内部变量FS : 输入记录的字段分隔符(默认是空格和制表符) OFS : 输出记录的字段分隔符(默认是空格) OFMT : 数字的输出格式(默认是 %.6g) RS : 输入记录间的分隔符(默认是NEWLINE) ORS : 输出记录间的分隔符(默认是NEWLINE) ARGV : 命
18、令行参数数组 ENVIRON : 存储系统当前环境变量值的数组,它的每个成员的索引就是一个环境变量名举例:cat /etc/passwd | awk BEGIN FS=: print User name: $1,UID: $4 30感谢你的观看2019年8月28awk自定义变量n定义变量:varname=valuen表达式中不带引号的字符串即被视为变量,如果之前未被赋值,默认值为0或“”n用法:awk awk_script awkvar1=value1 awkvar2=value2 . input_file n优先级:awk_script中的变量定义优先于命令行中的变量定义n如果需要调用she
19、ll变量,可以采用awk awk_script awkvar1=shellvar1 awkvar2=shellvar2 . input_file 31感谢你的观看2019年8月28awk内置函数n数值函数:int(x), sqrt(x), exp(x), log(x), sin(x), cos(x), atan2(y,x), rand(), srand(x), srand()n字符串函数:index(in, find), length(s), match(s, r), sprintf(), sub(p,r,t), gsub(p,r,t), substr(str, st, len), split
20、(s,a,fs), tolower(str), toupper(str)n系统函数:close(filename), system(command)32感谢你的观看2019年8月28awk自定义函数n自定义函数格式:function fun_name(param_list) function_body n举例:awk print “sum=”, SquareSum($1, $2) function SquareSum(x,y) sum=x*x+y*y; return sum grade.txt33感谢你的观看2019年8月28awk数组n访问数组元素for ( element in array
21、_name ) print array_nameelement n举例:awk BEGINprint split(“123#456#789”, mya, “#”); for ( i in mya ) print myai 34感谢你的观看2019年8月28避免awk错误的方法 确保整个awk_script用单引号括起来 确保awk_script内所有引号成对出现 确保用花括号括起动作语句,用圆括号括起条件语句 可能忘记使用花括号,也许你认为没有必要,但awk不这样认为,将按之解释语法 如果使用字符串,一定要保证字符串被双引号括起来(在模式中除外) 35感谢你的观看2019年8月282) 在aw
22、k中,设置有意义的变量名是一种好习惯,在进行模式匹配或关系操作时更容易理解。一般的变量名设置方式为name=$n3) 通常在BEGIN部分给一些变量赋值是很有益的,这样可以在awk表达式进行改动时减少很多麻烦4) awk的基本功能是根据指定规则抽取输入数据的部分内容并输出,另一个重要的功能是对输入数据进行分析运算得到新的数据并输出,这是通过在 awk_script中对字段变量($1、$2、$3.)重新赋值或使用更大的字段变量$n(n大于当前记录的NF)而实现的5) 使用字符串或正则表达式时,有时需要在输出中加入一新行或查询一元字符。这时就需要字符串屏蔽序列。awk中经常使用的屏蔽序列有: b
23、退格键 t tab键 f 走纸换页 ddd 八进制值 n 新行 r 回车键 c 任意其他特殊字符。eg: 为反斜线符号36感谢你的观看2019年8月28awk的输出函数printf 格式: printf (输出模板字符串, 参数列表) 参数列表是以逗号分隔的列表,参数可以是变量、数值或字符串。 输出模板字符串的字符串中必须包含格式控制符,有几个参数就要求有几个格式控制符。模板字符串中可以只有格式控制符而没有其它字符。 格式控制符: %-width.precfmt % : 标识一个格式控制符的开始,不可省略。 - : 表示参数输出时左对齐,可省略。 width : 一个数字,表示参数输出时占用域
24、的宽度,可省略。 .prec : prec是一个数值,表示最大字符串长度或小数点右边的位数,可省略。 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.0000awk BEGINprintf 2 number:%8.4f%8.2f,999,888 / 将打印 2 / number:999.0000 888.00037感谢你的观看2019年8月28总结nsed适合处理整行的文本nawk适合处理下面格式的文件col1col2col3col4 n更复杂的文本可通过结合sed和awk进行处理,或者通过其他更高级的脚本语言如perl/python进行处理n记住:C/C+不适合用来处理文本或字符串,所以,掌握1-2种脚本语言对于生物信息学来说,是非常有必要的38感谢你的观看2019年8月2839感谢你的观看2019年8月28