处理文本:
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