前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux进阶 03 文本处理三驾马车

Linux进阶 03 文本处理三驾马车

原创
作者头像
可乐同学与生信死磕到底
发布2024-04-18 21:14:56
1421
发布2024-04-18 21:14:56
举报

?重头戏来啦!真的很难很繁琐,每个命令下面又有许多个小参数,套娃!先记录下来以后要多看看~

1 grep

1.1 定义

grep是一种强大的文本搜索工具,它能使用正则表达式匹配模式搜索文本,并把匹配的行打印出来

1.2 格式

grep options pattern file

1.3 常见参数

-w:word 精确查找某个关键词 pattern

-c:统计匹配成功的行的数量

-v:反向选择,即输出没有匹配的行

-n:显示匹配成功的行所在的行号

-r:从目录中查找pattern

-e:指定多个匹配模式

-f:从指定文件中读取要匹配的pattern

-i:忽略大小写

也可以查询多个关键词,用-e连接

代码语言:sh
复制
less Data/example.gtf |grep -w -e  'gene' -e 'UTR'

这种方法比较麻烦,可以先把需要查询的几个关键词写入一个文档,然后使用grep -f参数进行文档中的关键词查询

1.4 正则表达式

是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑

^ 行首

$ 行尾

. 换行符之外的任意单个字符

? 匹配之前项0次或一次

+匹配1次或者多次

*匹配0次 或者多次

为避免歧义有时前面要加反斜杠\

| 或者

[] 匹配任意一个

高亮为grep独有

  • 练习题:
代码语言:sh
复制
cat Data/example.gtf | grep -w -e 'CDS' -w -e 'UTR' #这里为什么不能用|?

查找example.fq文件以@开头的行

example.fq文件一共有4000行

每4行为一个单位,一共有1000个单位

如何从这1006行@开头的行中滤掉@开头的质量行?

怎么知道这6行以@开头的质量行的位置?

2 sed

2.1 定义

sed:流编辑器,一般用来对文本进行增加、删除、修改、查找

增删查改

sed只是修改打印出来的内容,不会修改原文件

2.2 用法

sed [-options] 'script' file(s)2.3 常见参数-n:禁止显示所有输入内容,只显示经过sed处理的行(常用)

-e:直接在命令模式上进行sed的动作编辑,接要执行的一个或多个命令

-f:执行含有sed动作的文件

-r:sed的动作支持的扩展正则(默认基础正则)

-i:直接修改读取的文件内容,不输出

-i修改原文件不接受cat传进来的文件,直接sed -i 文件名2.4 script的内容:
pt' address:

2:第2行

2,4:第2行到第4行

2,$:第2行到最后一行

2~3:从第2行开始,每隔3行取一行 第2、5、8行

2,+4:从第2行到第2+4行

/pattern/:匹配上pattern的行

!:表示否定,取反

'2!'表示除了第2行2.5 常见command内容
pt' command:增删改查

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参数合用

删除第一行常用 第一行往往为标题行

三驾马车中都使用单引号!

  • sed与grep的比较

grep查询命令比较简单,同时有高亮

sed查询命令比较复杂,sed中p经常与-n合用,查询结果没有高亮

sed可以一边进行查询,一边进行修改并打印(连用s)

y进行一对一替换,a替换成A,b替换成B,以此类推

  • 思考题: 1.如何做大小写转换? 2.如何替换每一行的前4个字符? 3.如何对奇数行进行操作?
  • 练习题

单行序列的反向互补:-rev

代码语言:sh
复制
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进行大小写替换的区别

3 awk/gawk

编程语言,可对文本和数据进行处理

3.1 常见参数

-F fields 设置字段分隔符

3.2 用法

awk [options] '{script}' file

基础结构:'{script}'

匹配结构:'/pattern/{script}'

扩展结构:'BEGIN{script}{script}END{script}'

awk在读取一行文本时,会用预定义的字段分隔符划分每个数据字段,并分配给一个变量$0:代表整个文本行

$1:代表文本行中的第1个数据字段(第1列)

$NF:代表文本行中的最后一个数据字段

awk默认的字段分隔符是任意空白字符(如:空格or制表符),也可以用-F参数自定义分隔符

wk取出第9列?

代码语言:sh
复制
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的整个文本行 

3.3 awk内置变量

  • FS:定义输入字段分隔符,同 -F
  • RS:定义输入记录分隔符,Record Separator
  • OFS:定义输出字段分隔符
  • ORS:定义输出记录分隔符
  • NF:数据文件中的字段总数,可以简单理解为列数
  • NR:已处理的输入记录数,可以简单理解为行数

如何确定是空格还是tab键 cat -A

3.4 awk条件和循环语句

if:条件判断

awk ' { if (判断条件) { yes } else {no} } ' for:循环语句 awk ' { for (循环条件) {循环语句} } '

代码语言:sh
复制
less -S Data/example.gtf | awk '{if($3=="gene") print $0}' |less -S 打印出feature=gene的行
代码语言:sh
复制
$ 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

3.5 awk数学运算

?Y染色体上有多少个基因?

Homo开头的文件为Y染色体的基因组注释文件

把第三列是feature是gene的行打印出来,标记行数

代码语言:sh
复制
less -S Data/Homo_sapiens.GRCh38.102.chromosome.Y.gff3.gz | awk '{if($3=="gene"){print NR,$0}}' > Ygene
cat Ygene
wc -l Ygene
  • 如何计算每个外显子的长度? Data/example.gtf文件匹配feature为exon的行 每一行第5列?第4列即为exon的长度
  • int只取整,如何进行四舍五入?+0.5

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 grep
    • 1.1 定义
      • 1.2 格式
        • 1.3 常见参数
          • 1.4 正则表达式
          • 2 sed
            • 2.1 定义
              • 2.2 用法
              • 3 awk/gawk
                • 3.1 常见参数
                  • 3.2 用法
                    • 3.3 awk内置变量
                      • 3.4 awk条件和循环语句
                        • 3.5 awk数学运算
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                        http://www.vxiaotou.com