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

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

> 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) }' 
  • Что означает ./ (точка слэш) в linux?
  • Ограничительные «групповые» разрешения, но открывают «мировые» разрешения?
  • Разница между владельцем / корнем и RUID / EUID
  • Как я могу зашифровать файл?
  • Обратная сторона `tree` - восстанавливает структуру файлов и каталогов из содержимого текстового файла?
  • Почему запись в существующий файл происходит быстрее, чем запись нового пустого файла?
  • Создание символических ссылок в каталоге etc без доступа root
  • Синхронизация папок, в которых несколько файлов частично изменены
  • Переименовать файлы для вставки _ между словами StudlyCapsified
  • shell или perl-скрипт для проверки группы имеют права чтения
  • Рекурсивная очистка всех папок и подпапок в папке, в которой нет файлов
  • Linux и Unix - лучшая ОС в мире.