Создать бункеры с итогами и процентами - PullRequest
0 голосов
/ 13 февраля 2020

Я хотел бы создать ячейки для получения гистограммы с итогами и процентами, например, начиная с 0.

Если возможно, установить минимальное и максимальное значение в ячейках (в моем случае значение min = 0 и max = 20)

Входной файл

8  5
10 1
11 4
12 4
12 4
13 5
16 7
18 9
16 9
17 7
18 5
19 5
20 1
21 7

желаемый вывод

      0 0        0.0%
 0 -  2 0        0.0%
 2 -  4 0        0.0%
 4 -  6 0        0.0%
 6 -  8 0        0.0%
 8 - 10 5        6.8%
10 - 12 5        6.8%
12 - 14 13      17.8%
14 - 16 0        0.0%
16 - 18 23      31.5%
18 - 20 19      26.0%
   > 20 8       11.0%
---------------------
Total: 73

Я использую этот код от Mr Ed Мортон, работает отлично но процент пропущен.

awk 'BEGIN { delta = (delta == "" ? 2 : delta) }
{
    bucketNr = int(($0+delta) / delta)
    cnt[bucketNr]++
    numBuckets = (numBuckets > bucketNr ? numBuckets : bucketNr)
}
END {
    for (bucketNr=1; bucketNr<=numBuckets; bucketNr++) {
        end = beg + delta
        printf "%0.1f %0.1f %d\n", beg, end, cnt[bucketNr]
        beg = end
    }
}' file

Заранее спасибо

1 Ответ

2 голосов
/ 14 февраля 2020

Ваш ожидаемый вывод, кажется, не соответствует вашим образцам входных данных, но попробуйте этот вариант этого кода awk в вашем вопросе (предназначен для помещения в исполняемый файл для запуска в качестве сценария, а не лайнер из-за размера):

#!/usr/bin/awk -f
BEGIN { delta = (delta == "" ? 2 : delta) }
{
    bucketNr = int(($0+delta) / delta)
    cnt[bucketNr]++
    max[bucketNr] = max[bucketNr] < $2 ? $2 : max[bucketNr]
    sum += $2
    numBuckets = (numBuckets > bucketNr ? numBuckets : bucketNr)
}
END {
    for (bucketNr=1; bucketNr<=numBuckets; bucketNr++) {
        end = beg + delta
        printf "%d-%d %d %.1f\n", beg, end, max[bucketNr],
            (cnt[bucketNr] / NR) * 100
        beg = end
    }
    print "-------------"
    print "Total " sum
}

Добавляет отслеживание максимума второго столбца для каждого бина, в который попадает первый столбец, и выводит процент вместо количества строк в каждом бине , Плюс некоторые настройки выходного формата для лучшего соответствия желаемому выводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...