⭐重头戏来啦!真的很难很繁琐,每个命令下面又有许多个小参数,套娃!先记录下来以后要多看看~
grep是一种强大的文本搜索工具,它能使用正则表达式匹配模式搜索文本,并把匹配的行打印出来
grep options pattern file
-w:word 精确查找某个关键词 pattern
-c:统计匹配成功的行的数量
-v:反向选择,即输出没有匹配的行
-n:显示匹配成功的行所在的行号
-r:从目录中查找pattern
-e:指定多个匹配模式
-f:从指定文件中读取要匹配的pattern
-i:忽略大小写
也可以查询多个关键词,用-e连接
less Data/example.gtf |grep -w -e 'gene' -e 'UTR'
这种方法比较麻烦,可以先把需要查询的几个关键词写入一个文档,然后使用grep -f参数进行文档中的关键词查询
是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
^ 行首
$ 行尾
. 换行符之外的任意单个字符
? 匹配之前项0次或一次
+匹配1次或者多次
*匹配0次 或者多次
为避免歧义有时前面要加反斜杠\
| 或者
[] 匹配任意一个
高亮为grep独有
cat Data/example.gtf | grep -w -e 'CDS' -w -e 'UTR' #这里为什么不能用|?
查找example.fq文件以@开头的行
example.fq文件一共有4000行
每4行为一个单位,一共有1000个单位
如何从这1006行@开头的行中滤掉@开头的质量行?
怎么知道这6行以@开头的质量行的位置?
sed:流编辑器,一般用来对文本进行增加、删除、修改、查找
增删查改
sed只是修改打印出来的内容,不会修改原文件
sed [-options] 'script' file(s)
2.3 常见参数-n:禁止显示所有输入内容,只显示经过sed处理的行(常用)
-e:直接在命令模式上进行sed的动作编辑,接要执行的一个或多个命令
-f:执行含有sed动作的文件
-r:sed的动作支持的扩展正则(默认基础正则)
-i:直接修改读取的文件内容,不输出
2:第2行
2,4:第2行到第4行
2,$:第2行到最后一行
2~3:从第2行开始,每隔3行取一行 第2、5、8行
2,+4:从第2行到第2+4行
/pattern/:匹配上pattern的行
!:表示否定,取反
a:append,在指定行的后面增加一行
i:insert,在指定行的前面增加一行
d:delete,删除某一行或某几行,也可以指定删除匹配上的行
c:change,改变指定行的内容
s:更改或替换字符串
's/pattern/new/[flags]'
把pattern替换成new,默认只替换一个
可以指定flags为1/2/g来改变替换的数量
y:转换,实现字符一对一转换
'y/abc/ABC/'
p:print,把匹配或修改过的行打印出来,通常与-n参数合用
删除第一行常用 第一行往往为标题行
三驾马车中都使用单引号!
grep查询命令比较简单,同时有高亮
sed查询命令比较复杂,sed中p经常与-n合用,查询结果没有高亮
sed可以一边进行查询,一边进行修改并打印(连用s)
y进行一对一替换,a替换成A,b替换成B,以此类推
单行序列的反向互补:-rev
cat Data/example.fa | head -2 | sed '1d'
cat Data/example.fa | head -2 | sed '1d' | rev | sed 'y/ATCG/TAGC/'
多行序列的反向互补:
多行反向互补行与行之间的顺序也要颠倒过来!使用tac进行倒置
rev和tac的区别:
rev:在一行之内
tac:上下颠倒,行与行之间
注意sed用法:1在前 !在后
用tr进行大小写替换与用sed进行大小写替换的区别
编程语言,可对文本和数据进行处理
-F fields 设置字段分隔符
awk [options] '{script}' file
基础结构:'{script}'
匹配结构:'/pattern/{script}'
扩展结构:'BEGIN{script}{script}END{script}'
awk在读取一行文本时,会用预定义的字段分隔符划分每个数据字段,并分配给一个变量$0:代表整个文本行
$1:代表文本行中的第1个数据字段(第1列)
$NF:代表文本行中的最后一个数据字段
awk默认的字段分隔符是任意空白字符(如:空格or制表符),也可以用-F参数自定义分隔符
less -S Data/example.gtf | awk -F '\t' '{print $9}' | less -S #指定分隔符为制表符
less -S Data/example.gtf | awk '/UTR/{print $0}' | less -S #打印feature为UTR的整个文本行
如何确定是空格还是tab键 cat -A
if:条件判断
awk ' { if (判断条件) { yes } else {no} } '
for:循环语句
awk ' { for (循环条件) {循环语句} } '
less -S Data/example.gtf | awk '{if($3=="gene") print $0}' |less -S 打印出feature=gene的行
$ less -S Data/example.gtf | awk '{if($3=="gene") {print $0} else {print $3 "is not gene"}}' | less -S
bio09 20:42:22 ~
$ less -S Data/example.gtf | awk '{if($3=="gene") {print $1,$2,$3}}' |less -S
以行为单位进行循环,每一行里面取出$1 $2 $3
⭐Y染色体上有多少个基因?
Homo开头的文件为Y染色体的基因组注释文件
把第三列是feature是gene的行打印出来,标记行数
less -S Data/Homo_sapiens.GRCh38.102.chromosome.Y.gff3.gz | awk '{if($3=="gene"){print NR,$0}}' > Ygene
cat Ygene
wc -l Ygene
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。