生物信息之独孤九剑——awk

编者按:

在金庸武学体系的众多武功之中,独孤九剑并不是最强劲的武功,它与其他武林绝学有很大的不同,可以说是鹤立鸡群。比如乔峰的降龙十八掌,段誉的六脉神剑,张无忌的九阳神功,石破天的罗汉伏魔神功,这些神功都需要强大的内力支撑,而独孤九剑则不同,不需要内力,这点其实可以从华山派气宗与剑宗的分歧就可以看出来。独孤九剑传人风清扬属于剑宗,更注重招式,而不是像剑宗注重练气。独孤九剑分为总诀式,破剑式,破刀式,破枪式,破鞭式,破索式,破箭式,破掌式,破气式,遇到不同的场景使用关不同的招式,因此,独孤九剑更加注重问题的解决,本质上就是就是通过工具来解决问题。只要学会这九剑,就可以处理很多的问题。学习生物信息也是同样的道理,当然练好内功,掌握很好的基础是非常必要的,但是也可以学习一些小工具,解决一些实际问题。那么从这次内容开始,我们就来给大家介绍生物信息之独孤九剑。

awk是Linux系统中最强大的文本处理工具,很多需要编程才能完成的工作,其实通过awk工具就可以轻松解决。awk可以完成cut,grep,sed,join,uniq,wc等工具的一些功能,是非常强大的工具。相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切分,切开的部分再进行各种分析处理。

为什么awk功能这么强大呢,因为awk本身就是一门编程语言,所以学习awk有一定的难度,这种编程及数据操作语言的最大功能取决于你所掌握的awk技能多少。也就是刚开始可能觉得awk没多少用处,awk能够完成的工作,采用其他方法也都能完成,但是随着越来越熟悉awk的操作,就会发现,awk处理文本如此的高效,几乎可以完成所有的文本处理。

awk有三种执行方式,

第一种是awk命令行模式;

第二种是使用-f选项调用awk程序;

第三种就编程模式;
在这里插入图片描述

案例1:输出一个列表任意行;

awk ‘{print $1}’ blast_m8.out #输出blast m8 格式结果的第一行;

awk -F “:” ‘{print 1 , 1, 1,NF}’ passwd.list #通过-F修改默认分隔符为冒号,输出第一行与最后一行;

案例2:格式转换

awk ‘{print"@" $1"\n"$10"\n""+\n"$11""}’ all.sam #将短序列比对上的reads输出出来,生成fastq文件;

案例3:过滤blast结果

awk ’{if ($3>=80 && $4>=100) print $0}’ blast_m8.out #过滤blast比对结果,将identity 大于80,并且比对长度大于100bp的结果输出;

案例4:比较

awk ‘$8>$10’ input.txt #输出第8列大于第10列的行。

案例5:匹配输出

awk ‘$0~ /wang/{print $0}’ passwd.list #利用正则表达式,将秘密表中姓wang的账户都输出出来;

案例6:格式化输出

awk ‘BEGIN{print “The Program Begin\n”}{if ($3>=80 && $4>=100) print $0}END{print " The Program End\n"}’ input.txt #利用BEGIN和END关键字生成报告;

案例7:修改字段和记录分隔符

awk ‘BEGIN{OFS="\t"}{print $2,$4,$5}’ input.txt #在BEGIN中设定字段分隔符和记录分隔符;

案例8:awk编程计算

awk ‘{x+=$3}END{print x/NR}’ input.txt #计算第三列的平均值,最后在END将其输出出来。

案例9:awk编程比较大小

awk ‘BEGIN { max=100 ;print “max=” max} {max=($1 >max ?$1:max); print $1,"Now max is "max}’ input.txt #取得文件最后一个域的最大值。

案例10:awk编程求和

awk ‘{print $0,$3+$4}’ input.txt #计算第3列和第4列的和。

案例11:输出固定行内容

awk ‘NR>=20&&NR<=80’ input.txt #输出第20到第80行内容。

案例12:合并文件

awk ‘BEGIN{while((getline<“file1”)>0)l[$1]=$0}$1 in l{print $0"\t"l[$1]}’ file2 #将两个文件按列合并起来,类似jion命令的功能。

案例13:去重复

awk ‘!($0 in a) {a[$0];print}’ input.txt # 打印不重复的行,类似uniq的功能;

awk ‘!($2 in l){print;l[$2]=1}’ input.txt #计算第二列内容非冗余的次数,类似于uniq的功能;

案例14:统计字符

awk ‘{for(i=1;i!=NF;++i)c[$i]++}END{for (x in c) print x,c[x]}’ input.txt 计算每个字符出现的次数,类似wc的功能。

案例15:替换

awk ‘{sub(/test/, “no”, $0);print}’ input.txt 进行替换,类似sed的功能,

案例16:fastq转换为fasta

awk ‘{getline seq;getline plus;getline qual;sub("@",">",$0);print $0 "\n"seq}’ test.fastq

更多内容,请关注微信公众号:基因学苑

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值