我制作了一个小的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%
答案 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