2、awk的输出

1、常见的输出格式整理

awk '{print "this is " $1, $2, $1*$2, NR, NF, $NF}' file1   ###字符输出,字段输出,运算输出,内置变量输出等,默认空格分开;$1 ,$2调换顺序打印随之变化

awk 'BEGIN{FS=OFS="\t"} {print $1,$2 }' file2  ###读入字段分割,输出字段分割

 awk -F '[ :\t|]' '{print $1}' file          ##可以有多个分割符

awk  {printf ("this is\t%d\t%.2f %s %s %s\n",NR,NF,$1,$2,$NF)}'  file3 ###printf( )不自动换行;%d ,%.2f, %s;字段分割也可以指定

awk '{$2="";print }' file  ##不打印第二列

 

2、选择

数字选择:awk '$2 > 10{print}' file    ###+   -  *   /    %  ^ ; >=   <=   !=   ==  ; ~    !~   /gene/ || /mNA/

字符选择 :awk ‘$2 == "gene" {print}’ file 

    awk '/mRNA/{match($9,/ID=(.*);P/,a);printf "%s\t%s\t%d\t%d\n",$1,a[1],$4,$5}' Chr_genome_final_gene.gff3  ##生成circos的gff文件

    awk '{gsub(/gene/,"gene_id",$3);print}' Chr_genome_final_gene.gff3|less          ##替换处理

 

正则匹配:awk ‘ /gene/ {print}’ file   ###^   $   .   []  \  | () * + ?

组合选择:&& || ! 和and  or not

      awk ‘$2 >=10 && $3<=20 {print}’ file

文本处理开始于结束BEGIN{} END{}

 

3、计算

数字计算:awk '{a+=2}END{print a}' file      

字符串联:awk '{a = a " " $1} END{print a}' file   或者  awk '{a = a $1 " "} END{print a}' file

总行以及最后一行:awk '{last = $0}END{print NR, last}' file     

内建函数:length($0)          ##$0不包含换行符

每一行所有字段和:awk '{ sum = 0; for( i = 4; i <= 5; i++){printf("%d\t" , $i); sum += $i };print sum }'    ##打印4,5列,计算每行的4到5列的和

所有行字段和:awk '{ for( i = 4; i <= 5; i++){ sum+=$i }}END{ print sum }'

 

4、流程控制语句

if() print else print

while(){}

for (i=0; i<=5;i++){}

for (i  in  a) {}

next  ; break

 

4、数组

awk '{a[NR] = $0} END{ for(i = 1;i <= NR;i++)print a[i]}' file

 

5、常用内建字符串函数

index(r , t)    match(s , r ,arr)   sprintf   split(s ,arr, fs)   gsub(r ,s, tar)   substr(s, star, len)        

 

posted @ 2018-12-09 17:20  风中之铃  阅读(3869)  评论(0编辑  收藏  举报