bash:从频率表中获取百分比

时间:2010-09-27 09:53:03

标签: linux bash shell awk

我制作了一个小的bash脚本,以便获取文件某一列中项目的频率。

输出就像这样

A     30
B     25
C     20
D     15
E     10

我在脚本中使用的命令就像这样

cut -f $1 $2| sort | uniq -c | 
sort -r -k1,1 -n | awk '{printf "%-20s %-15d\n", $2,$1}'

我如何修改它以显示每个案例的相对百分比。所以就像

A     30     30%
B     25     25%
C     20     20% 
D     15     15%
E     10     10%

2 个答案:

答案 0 :(得分:4)

将awk命令更改为以下内容:

awk '{ a[++n,1] = $2; a[n,2] = $1; t += $1 }
     END {
         for (i = 1; i <= n; i++)
             printf "%-20s %-15d%d%%\n", a[i,1], a[i,2], 100 * a[i,2] / t
     }'

答案 1 :(得分:4)

试试这个(将排序移到最后:

cut -f $1 $2| sort | uniq -c  | awk '{array[$2]=$1; sum+=$1} END { for (i in array) printf "%-20s %-15d %6.2f%%\n", i, array[i], array[i]/sum*100}' | sort -r -k2,2 -n