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)