awk输出字段相对于长度的百分比
下面使用示例输入的awk输出字段相对于长度的百分比,awk,Awk,下面使用示例输入的awk将输出以下内容:基本上,它将$5中与7
awk
将输出以下内容:基本上,它将$5
中与7<30
匹配的文本取平均值
awk '{if(len==0){last=$5;total=$7;len=1;getline}if($5!=last){printf("%s\t%f\n", last, total/len);last=$5;total=$7;len=1}else{total+=$7;len+=1}}END{printf("%s\t%f\n", last, total/len)}' Input.txt > output.txt
样本输入
chr 1 955542 955763 + AGRN:exon.1 1 0
chr 1 955542 955763 + AGRN:exon.1 2 0
chr 1 955542 955763 + AGRN:exon.1 3 0
chr 1 955542 955763 + AGRN:exon.1 4 1
chr 1 955542 955763 + AGRN:exon.1 5 1
chr 1 955542 955763 + AGRN:exon.1 6 1
....
....
chr 1 955542 955763 + AGRN:exon.1 218 32
chr 1 955542 955763 + AGRN:exon.1 219 32
chr 1 955542 955763 + AGRN:exon.1 220 32
chr 1 955542 955763 + AGRN:exon.1 221 29
AGRN:exon.1 4.5714285
AGRN:exon.1 4.5714285 3.16742% (221 (# of lines in `6' / 7 #3 of lines `< 30`)
输出
chr 1 955542 955763 + AGRN:exon.1 1 0
chr 1 955542 955763 + AGRN:exon.1 2 0
chr 1 955542 955763 + AGRN:exon.1 3 0
chr 1 955542 955763 + AGRN:exon.1 4 1
chr 1 955542 955763 + AGRN:exon.1 5 1
chr 1 955542 955763 + AGRN:exon.1 6 1
....
....
chr 1 955542 955763 + AGRN:exon.1 218 32
chr 1 955542 955763 + AGRN:exon.1 219 32
chr 1 955542 955763 + AGRN:exon.1 220 32
chr 1 955542 955763 + AGRN:exon.1 221 29
AGRN:exon.1 4.5714285
AGRN:exon.1 4.5714285 3.16742% (221 (# of lines in `6' / 7 #3 of lines `< 30`)
我的问题是,我似乎无法添加正确的语法来输出$6
中表示$5
的行的总数以及7<30
的百分比。我知道我的话可能没有多大帮助,所以希望所需的输出会有所帮助。谢谢:)
所需输出
chr 1 955542 955763 + AGRN:exon.1 1 0
chr 1 955542 955763 + AGRN:exon.1 2 0
chr 1 955542 955763 + AGRN:exon.1 3 0
chr 1 955542 955763 + AGRN:exon.1 4 1
chr 1 955542 955763 + AGRN:exon.1 5 1
chr 1 955542 955763 + AGRN:exon.1 6 1
....
....
chr 1 955542 955763 + AGRN:exon.1 218 32
chr 1 955542 955763 + AGRN:exon.1 219 32
chr 1 955542 955763 + AGRN:exon.1 220 32
chr 1 955542 955763 + AGRN:exon.1 221 29
AGRN:exon.1 4.5714285
AGRN:exon.1 4.5714285 3.16742% (221 (# of lines in `6' / 7 #3 of lines `< 30`)
AGRN:exon.1 4.5714285 3.16742%(221行`'6'/7 `<30`/3行)
我认为你的程序不会按你说的做。不管怎样,这可能就是你想要的
$ awk '$8<30{a[$6]+=$7;c[$6]++}
{t[$6]++}
END{for(i in a) print i,a[i]/c[i],(100*c[i]/t[i])"% ("t[i]" lines)"}' file