awk处理文本按关键词分类(相同关键词并在一类)

处理文本:
M1179-1 function=deletion;      1263
M1179-1 function=insertion;     872
M3-S11  function=deletion;      1278
M3-S11  function=insertion;     898
M1159-1 function=deletion;      878
M1159-1 function=insertion;     859
我想按照第二列信息进行分类生成如下结果:
function  M1179-1  M3-S11 M1159-1
deletion  1263        1278     878
insertion  872         898      859
---------------------------------------------------------------------------------------------

awk -F'[=; ]+' '{a[$1];b[$3];c[$1,$3]=$NF}END{printf $2" ";for(i in a)printf i" ";print"";for(i in b){printf i" ";for(n in a)printf c[n,i]" ";print ""}}' file |column -t
如果我同时希望可以计算出每一行的数值之和以及对比总和的比例,应该怎么做呢? 也就是: 我想生成如下结果: function  M1179-1  M3-S11 M1159-1 total   ratio deletion  1263        1278     878        3416  0.565   ####3419/(3419+2629) insertion  872         898      859         2629  0.435   ####2629/(3419+2629)保留3位有效小数 有什么方法可以实现么?
——————————————————————————————————
1 awk -F'[ =;]+' '{f[$1];a[$1" "$3]=$4;t[$3]+=$4;ta+=$4}END{printf "function";for(i in f) printf "\t%s",i; printf "\ttotal\tratio\ndeletion"; for(i in f) printf "\t%d",a[i" deletion"]; printf "\t%d\t%0.3f\ninsertion",t["deletion"],t["deletion"]/ta; for(i in f) printf "\t%d",a[i" insertion"];printf "\t%d\t%0.3f\n",t["insertion"],t["insertion"]/ta}' infile
2 ------------------------------------------------------------------------------------
3 function        M1159-1        M3-S11        M1179-1        total                ratio
4 deletion        878                1278        1263        3419        0.565
5 insertion        859                898                872                2629        0.435

 

posted on 2013-12-12 17:58  三川  阅读(445)  评论(0)    收藏  举报