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

Мне нужна программа, которая выводит количество разных символов в файле. Пример:

> stats testfile ' ': 207 'e': 186 'n': 102 

Существует ли какой-либо инструмент, который делает это?

2 Solutions collect form web for “Как я могу подсчитать количество разных символов в файле?”

Следующее должно работать:

 $ sed 's/\(.\)/\1\n/g' text.txt | sort | uniq -c 

Во-первых, мы вставляем новую строку после каждого символа, помещая каждый символ в свою строку. Затем мы сортируем его. Затем мы используем команду uniq для удаления дубликатов, префикс каждой строки с количеством вхождений этого символа.

Чтобы отсортировать список по частоте, проведите все это в sort -nr .

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

 awk ' {for (i=1; i<=length; i++) ++c[substr($0,i,1)]; ++c[RS]} function chr (x) {return x=="\n" ? "\\n" : x==":" ? "\\072" : x=="\\" || x=="'\''" ? "\\" x : x} END {for (x in c) printf "'\''%s'\'': %d\n", chr(x), c[x]} ' | sort -t : -k 2 -r | sed 's/\\072/:/' 

Вот решение Perl по тому же принципу. Преимущество Perl заключается в возможности сортировки внутри. Кроме того, это будет неправильно подсчитывать дополнительную строку новой строки, если файл не заканчивается символом новой строки.

 perl -ne ' ++$c{$_} foreach split //; END { printf "'\''%s'\'': %d\n", /[\\'\'']/ ? "\\$_" : /./ ? $_ : "\\n", $c{$_} foreach (sort {$c{$b} <=> $c{$a}} keys %c) }' 
  • Как определить все файлы, созданные командой
  • Разрешение NFS отклонено
  • Ошибка при вызове mv с подстановочными знаками
  • Наличие нескольких компьютеров в файле доступа к сети?
  • Присоединение файлов на диске
  • Что имеет приоритет - разрешение владельца / пользователя и группы?
  • Копирование файлов в каталог, открытый через ACL, не получает маску по умолчанию
  • Как определить количество подкаталогов и файлов из команды ls -ld?
  • Не удалось сохранить право собственности на копию, но в состоянии двигаться?
  • Объединение файлов в них также добавляет новую строку между каждым файлом
  • Как считать рекурсивно количество файлов в нескольких каталогах?
  • Linux и Unix - лучшая ОС в мире.