bash: получение процента из таблицы частот - PullRequest
9 голосов
/ 27 сентября 2010

Я сделал небольшой скрипт 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 ]

4 голосов
/ 27 сентября 2010

Попробуйте это (с сортировкой, перемещенной в конец:

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
4 голосов
/ 27 сентября 2010

Измените свою команду 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
     }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...