2015-09-30 61 views
2

使用示例输入的awk会输出以下内容:基本上,它将$5中的文本平均为7 < 30awk输出字段与长度比较的百分比

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 

我的问题是,我似乎无法添加正确的语法,也将输出线在总#代表$5$6和的百分比0我知道我的话可能不是那么有用,所以希望输出将有所帮助。谢谢 :)。

所需的输出

AGRN:exon.1 4.5714285 3.16742% (221 (# of lines in `6'/7 #3 of lines `< 30`) 

回答

2

我不认为你的程序做了你说的话。不管这可能是你在找什么

$ 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 

会给(从输入文件中删除...

AGRN:exon.1 34.5714 70% (10 lines) 
+0

非常感谢你:)之后。 – Chris