awk输出字段与长度的百分比

时间:2015-09-30 18:35:08

标签: awk

使用示例输入下面的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

我的问题是我似乎无法添加正确的语法,该语法也会输出代表$6的{​​{1}}中的总行数和$5的{​​我知道我的单词的%可能不是那么有用所以希望所需的输出会有所帮助。谢谢你:)。

所需的输出

7 < 30

1 个答案:

答案 0 :(得分: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)