Linux学习4 sed和awk

Linux下常识

  • \t 制表符(Tab键)
  • \n 换行符(Enter键)
  • Backspace键不起作用时,可以Ctrl+Backspace
  • 成对的符号最好成对先打然后再打里面的内容,比如‘’,"",()
  • --help 调用帮助文档
  • 软链接文档应该是浅蓝色,红色就有问题(前提是之前修改过命令行配色)

sed

sed [-option] 'script' file
option参数用的较少,其中-e是执行多个命令。主要设置就是script参数的操作:
script包含3部分:[address][!]command
address是指出操作的位置:
2 表示第2行
2,4 表示第2-4行
2,$ 表示第2到最后一行
2 ~3 表示从第2行开始,每隔3行取一行
/pattern/ 表示能匹配上pattern的行
[!] 表示取反
command是怎么操作:
a 指定位置后增加一行,内容为a后面的字符串
i 指定位置前增加一行,内容为i后面的字符串
d 删除某几行
c 修改一整行的内容
s/old/new/[flags] 把整个old内容用new内容替换(///可以换成###,---等等),且默认只替换第一个,要全部替换要用g
y/ATCG/TAGC/ 把ATCG的每个字符一一对应的替换为TAGC,所以可以用来取反向互补链

sed练习:

先看原图: cat readme.txt


Linux学习4 sed和awk_第1张图片
图片.png

要增加一行内容: cat readme.txt |sed '1a welcome to a new world'


Linux学习4 sed和awk_第2张图片
图片.png

要在每行前都增加一行相同的内容:cat readme.txt |sed '1,3i welcome to a new world'


Linux学习4 sed和awk_第3张图片
图片.png

要把某几行用相同的内容替换掉:cat readme.txt |sed -e '1,3i welcome to a new world' -e '1,3d'
图片.png

要把整个文章里的某些单词替换成另外的单词:cat readme.txt | sed 's/to/TO/g'


Linux学习4 sed和awk_第4张图片
图片.png

猜一猜:cat readme.txt | sed '/^$/d'是啥意思?
图片.png

awk是一个编程语言

既可以像grep和sed一样对文本处理,也可以对数据进行处理,可以配合if等语句一起使用,强大!
1、最基本结构:awk [option] '{script}' file
2、复杂一点的结构:awk [option] '/pattern/{script}' file
3、再复杂一点的结构:awk [option] 'BEGIN{script}{script}END{script}' file
工作原理:awk在处理每一行文本时,是首先对文本进行字段切割,然后按字段逐一进行读取,默认的字段分隔符是空格或制表符。所以,$0代表整行文本,$1代表第一个字段,以此类推,$NF代表最后一个字段。(似曾相识啊,R语言里面也有类似的语法)

awk练习:

先上原数据:less -S example.gtf


Linux学习4 sed和awk_第5张图片
图片.png

为了看清楚是换行符还是空格:cat -A example.gtf | less -S


Linux学习4 sed和awk_第6张图片
图片.png

取第9-10列内容:

less -S example.gtf | awk '{print $9,$10}' | less -S
Linux学习4 sed和awk_第7张图片
图片.png

想要自己指定分隔符,比如只要制表符:less -S example.gtf | awk -F '\t' '{print $9}' | less -S


Linux学习4 sed和awk_第8张图片
图片.png

设置把符合筛选条件的行输出,则要用到if语句:

less -S example.gtf | awk  '{if($3 == "gene") print $0}' | less -S
Linux学习4 sed和awk_第9张图片
图片.png

如果只是匹配gene的话,只要带有gene的字段就全都输出了:less -S example.gtf | awk '/gene/{print $0}' | less -S


Linux学习4 sed和awk_第10张图片
图片.png

搜一搜是什么意思:

less -S example.gtf | awk  'BEGIN{FS="\t";OFS="\t"} {gsub("gene","Gene",$3);print $0}' |less -S
Linux学习4 sed和awk_第11张图片
图片.png

你可能感兴趣的:(Linux学习4 sed和awk)