前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零开始的异世界生信学习 linux部分 linux 基础---学习笔记-3 Linux三剑客 grep,sed,awk

从零开始的异世界生信学习 linux部分 linux 基础---学习笔记-3 Linux三剑客 grep,sed,awk

原创
作者头像
用户10361520
发布2023-02-21 23:58:07
5280
发布2023-02-21 23:58:07
举报
文章被收录于专栏:从头开始的生信学习

三个适用的命令—grep,sed,awk

1.grep

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

格式:grep options pattern file

常见参数:

-w:word 精确查找某个关键词 pattern less -S Data/example.gtf | grep -w 'gene' ##匹配文件中含有gene的文字

-c:统计匹配成功的行的数量 less -S Data/example.gtf | grep -w -c 'gene' ##统计含有gene的行的数量

-v:反向选择,即输出没有没有匹配的行less -S Data/example.gtf | grep -w -v -c 'gene' ##统计没有gene的行的数量

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

-r:从目录中查找pattern ##-r后面接的是文件目录,不能接其他的

-e:指定多个匹配模式 less -S Data/example.gtf | grep -w -e 'gene' -e 'exon' ##查找gene或者exon,有几个关键词,写几个-e

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

代码语言:shell
复制
cat >file
gene
UTR
start_codon
stop_codon
^C(Ctrl C)
less -S Data/example.gtf | grep -w -f 'file' | less -S
##可以将想要查找的关键词存到一个文件中,再按照文件查找

-i:忽略大小写

2 正则表达式简述

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

代码语言:javascript
复制
^ 行首    ##cat readme.txt  | grep '^T'   查找以T开头的行
$ 行尾    ##cat readme.txt  | grep ')$'   查找以)结尾的行
. 换行符之外的任意单个字符  ##cat readme.txt  | grep 'f.ee'  查找f ee 中间由任意字符组成的关键词 
? 匹配之前项0次或者一次  ##cat readme.txt  | grep 'f\?ee' "\"表示转义,让系统识别?为正则表达式,而非字符?
  ##也可写成  cat readme.txt  | grep -E 'f?ee'
+ 匹配1次或者多次  ##cat readme.txt  | grep 're\+'
* 匹配0次或者多次  ## cat readme.txt  | grep 're*'  *不需要转义
{n} 匹配n次
{n,} 匹配至少n次
{m,n} 至少m,最多n
[] 匹配任意一个  ##cat readme.txt  | grep [bB] 查找b或者B
[^] 排除字符 ##[^Tt]  ## 查找除了T和t的文字
| 或者  ##cat Data/example.gtf | grep -E 'UTR|exon'  查找UTR或者exon 使用的时候加上 -E 进行正则表达式转义

3 sed 流编辑器

sed:流编辑器,一般用来对文本进行增删改查(对打印到标准输出流中的文件进行处理)

sed 以行为单位处理

用法:sed -options 'script' file(s)

代码语言:javascript
复制
常见参数:## [-optioons]

-n :禁止显示所有输入内容,只显示经过sed处理的行(常用)

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

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

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

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

用法中的 'script' 中 包括 address command

address 的用法
address 的用法

生信技能树

script 的常见命令
script 的常见命令

生信技能树

sed 命令中,执行多步-e操作时,每一步的行数都是原文件的行数

代码语言:javascript
复制
cat readme.txt | sed '1i Welcome to Biotrainee() '  ## 在文本的第一行前面加Welcome to Biotrainee()
cat readme.txt | sed '1,3i Welcome to Biotrainee() '  ##在文本的第一行到第三行每一行前面都加一句Welcome to Biotrainee()
cat readme.txt | sed '1a Welcome to Biotrainee() ' ## 在文本的第一行后面加Welcome to Biotrainee()
cat readme.txt | sed '1c Welcome to Biotrainee() ' 
cat readme.txt | sed '/^$/d'  ## /^$/ 这在正则表达式中指空行,这个sed命令是删除文本中的空行
cat readme.txt | sed 's/is/IS/g' ## g表示全局替换global,是[flags]的一个参数,默认值为1,表示每行的第一个匹配到的字符串进行替换
cat readme.txt | sed '1 s/ee/EE/g'
cat readme.txt | sed '1~3 s/ee/EE/' ##第一行开始,每隔3行(1,4,7)中的第一个ee替换成EE
cat readme.txt | sed '/www/ s/ee/EE/'  ##现在address位置进行匹配,匹配www的行,将这行的ee改成EE
cat readme.txt | sed  'y/abc/ABC/'  ##将所有小写abc更换成大写ABC
cat readme.txt | sed -n '/ee/p'
cat readme.txt | sed -n 's/ee/EE/p'

使用sed命令取一个.fa文件中单行序列的反向互补序列

head -2 Data/example.fa | sed '1d' | sed '2,$ y/ACGT/TGCA/' | rev

使用sed命令取多行序列的反向互补序列

head Data/example.fa | sed '1d' | sed '2,$ y/ACGT/TGCA/' | rev | tac

4 awk命令

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

awk 常见结构
awk 常见结构

生信技能树

代码语言:javascript
复制
常见参数:-F,fields,设置字段分隔符;

-v,var=value 定义awk程序中的一个变量及其默认值

用法:awk [options]  '{script}'  file

基础结构: ' {script} '

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

扩展结构: 'BEGIN{script} {script} END{script}'
awk 部分参数
awk 部分参数
代码语言:javascript
复制
# 基本用法
less -S  Data/example.gtf 
less -S  Data/example.gtf | cut -f 9 | less -S
less -S  Data/example.gtf | awk '{print $9}' | less -S
less -S  Data/example.gtf | awk '{print $9,$10}' | less -S
less -S  Data/example.gtf | awk -F '\t' '{print $9}' | less -S
代码语言:javascript
复制
# 扩展结构
less -S Data/example.gtf | awk '/UTR/{print $0}' | less -S   ##匹配模式
less -S Data/example.gtf | awk 'BEGIN{print "find UTR feature"} /UTR/{print $0} END{print "end"}' ##注意三段式
less -S Data/example.gtf | awk 'BEGIN{FS="\t"} {print $9}' | less -S
less -S Data/example.gtf | awk 'BEGIN{FS="\t"} {print NR,$9}' | less -S
awk 内置变量
awk 内置变量

生信技能树

代码语言:javascript
复制
# 条件和循环
less -S  Data/example.gtf | awk '{if($3=="gene") {print $0} }' | less -S
less -S  Data/example.gtf | awk '{if($3=="gene") {print $1,$2,$3} }' | less -S
less -S  Data/example.gtf | awk '{for(i=1;i<4;i++){print $i} }' | less -S
less -S  Data/example.gtf | awk '{for(i=1;i<4;i++){print $i} }' | paste - - - | less -S
awk 条件和循环
awk 条件和循环

生信技能树

代码语言:javascript
复制
# 运算和字符处理
less -S  Data/example.gtf | awk '/exon/{print $5-$4}' | less -S
less -S  Data/example.gtf | awk '{print $5/$4}' | less -S
less -S  Data/example.gtf | awk '{print int($5/$4) }' | less -S
less -S  Data/example.gtf | awk '{print int($5/$4 + 0.5) }' | less -S
less -S Data/example.gtf | awk 'BEGIN{FS="\t";OFS="\t"} {gsub("gene","Gene
awk 运算符号
awk 运算符号

生信技能树

less -S Data/example.gtf | awk '/UTR/{print $1,$3,$5,$6,$7}' | head ##awk命令中,可以实现查找特定匹配的行并输出某几列数据,$表示哪一列

5 Linux常见符号及其含义

常见符号

通配符

正则表达式

Linux常见符号及其含义
Linux常见符号及其含义

生信技能树 >>追加是指可以在文件中添加内容,不会覆盖该文件

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三个适用的命令—grep,sed,awk
    • 1.grep
      • 2 正则表达式简述
        • 3 sed 流编辑器
          • 4 awk命令
            • 5 Linux常见符号及其含义
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档