создание таблицы частот из файла - PullRequest
41 голосов
/ 18 мая 2011

Учитывая входной файл, содержащий одно единственное число в строке, как я могу получить счетчик того, сколько раз элемент встречался в этом файле?

cat input.txt
1
2
1
3
1
0

желаемый вывод (=> [1,3,1,1]):

cat output.txt
0 1
1 3
2 1
3 1

Было бы здорово, если бы решение можно было расширить и для плавающих чисел.

Ответы [ 6 ]

78 голосов
/ 18 мая 2011

Вы хотите сказать, сколько раз элемент появляется во входном файле?Сначала отсортируйте его (используя -n, если входные данные всегда являются числами, как в вашем примере), затем подсчитайте уникальные результаты.

sort -n input.txt | uniq -c
10 голосов
/ 18 мая 2011

Другой вариант:

awk '{n[$1]++} END {for (i in n) print i,n[i]}' input.txt | sort -n > output.txt
1 голос
/ 31 декабря 2016

Использование maphimbu из пакета Debian stda :

# use 'jot' to generate 100 random numbers between 1 and 5
# and 'maphimbu' to print sorted "histogram":
jot -r 100 1 5 | maphimbu -s 1

Выход:

             1                20
             2                21
             3                20
             4                21
             5                18

maphimbu также работает с плавающей точкой:

jot -r 100.0 10 15 | numprocess /%10/ | maphimbu -s 1

Выход:

             1                21
           1.1                17
           1.2                14
           1.3                18
           1.4                11
           1.5                19
1 голос
/ 21 мая 2011

В дополнение к другим ответам вы можете использовать awk для создания простого графика . (Но, опять же, это не гистограмма.)

1 голос
/ 18 мая 2011

По крайней мере, кое-что из этого можно сделать с помощью

sort output.txt | uniq -c

Но заказ number count меняется на противоположный. Это решит эту проблему.

sort test.dat | uniq -c | awk '{print $2, $1}'
0 голосов
/ 22 сентября 2015
perl -lne '$h{$_}++; END{for $n (sort keys %h) {print "$n\t$h{$n}"}}' input.txt

Зацикливание каждой строки с помощью -n
Каждое $_ число увеличивает хеш %h
После достижения END из input.txt,
sort {$a <=> $b}Числовой хэш
Выведите число $n и частоту $h{$n}

Аналогичный код, который работает с плавающей запятой:

perl -lne '$h{int($_)}++; END{for $n (sort {$a <=> $b} keys %h) {print "$n\t$h{$n}"}}' float.txt

float.txt

1.732
2.236
1.442
3.162
1.260
0.707

вывод:

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