file
1 115466 S C ./. ./. 0/0 ./. ./.
r1 546608 F C ./. 0/1 0/0 ./. 1/1
r2 566085 T H 0/0 ./. 0/1 ./. ./.
要求:
前四个字符不动,从第五个字符开始,统计后面的后面各个字符出现的次数,处理好的结果如下:
1 115466 S C 0/0:1 ./.:4
r1 546608 F C 1/1:1 0/0:1 0/1:1 ./.:2
r2 566085 T H 0/0:1 0/1:1 ./.:3
awk '{for(i=5;i<=NF;i++)a[$i]++;for(i=1;i<=4;i++)printf "\t" $i;for(i in a)printf "\t" i":"a[i];printf "\n";delete a }' file |column -t
解释:a[$i]++之后没有END,因为这里是统计的是每行的数字不是总共的数字,这次统计没有完成,统计完成到输出这行才是一次处理结果的结束。最后的delete a的意思是将整个数组删除,原因为如果不删除的话,那么上次统计的结果仍然会存储在数组中。导致结果的不准确。