【问题标题】:bash: getting percentage from a frequency tablebash:从频率表中获取百分比
【发布时间】:2011-04-17 16:35:01
【问题描述】:

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

【问题讨论】:

  • 我认为这个例子会更清楚,如果数字本身不加起来,就是 100。

标签: linux bash shell awk


【解决方案1】:

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

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

【讨论】:

  • 这太棒了!谢谢。
【解决方案2】:

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

【讨论】:

  • 这个非常适合作为我自己命令的插件,而 Dennis 出于某种原因删去了大约一半的行。
猜你喜欢
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 2021-11-18
  • 2012-10-19
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多