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

我已经做了一个小的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% 

Solutions Collecting From Web of "bash:从频率表中获取百分比"

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

 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 

改变你的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 }'