sed awk的奇技淫巧

字符串

  1. substr截取字符串长度
>>echo aaabbbcc |awk '{print substr($1,2)}'
>>aabbbcc

第一个参数 截取的字段
第二个截取的起始位置,默认下标从1开始
第三个参数是指定截取的长度

  1. gsub替换字符串
###不使用正则
>>echo aaabbbcc |awk 'gsub("a","e",$1){print}'
>>eeebbbcc
###使用正则
>>echo aaabbbcc |awk 'gsub(/aa/,"e",$1){print}'
>>eabbbcc

这与sed ‘s///g’的手法大同小异默认全局替换,也就是整个字段进行替换

统计

  1. 对出现的行的数目进行统计
    使用awk中的关联数组
>>awk '{a[$1]+=1}END{for(i in a)print a[i];}' 

从代码中我们也可以看出使用关联数组来统计某一字段出现的次数;

延伸一下,我们通常需要找两个文件共同的基因,我通常的做法是使用 sortuniq -d 这样可以快速的找打两个文件中重复基因;但有多个文件的时候怎么办呢?这时候就可以考虑使用awk关联数组的办法了,使用cat合并文件之后统计基因出现的次数等于文件数目,也就找出来多个文件中共有的基因啦!

awk -F “\t” ‘{a=substr($1,1,15);b=substr($1,6,3);c=substr($8,6,3)}{if(a==$8){print $0”\t”0;}else if()}’ Best_Repeat_Low_OT_gtf|less