2010-09-27 78 views
6

我已經做了一個小的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% 
+1

我認爲的例子將如果這些數字沒有加起來,就會更清楚一些,達到100。 – 2010-09-27 10:21:31

回答

2

試試這個(與排序移動到最後:

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 
    }'