Я хотел бы знать эквивалент
cat inputfile | sed 's/\(.\)/\1\n/g' | sort | uniq -c
представленные в /programming/4174113/how-to-gather-characters-usage-statistics-in-text-file-using-unix-команды для создания статистики использования символов в текстовых файлах для подсчета двоичных файлов простые байты вместо символов, т.е. вывод должен быть в виде
18383 57
12543 44
11555 127
8393 0
Неважно, если команда занимает столько времени, сколько указано для символов.
Если я применяю команду для символов к двоичным файлам, вывод содержит статистику для произвольных длинных последовательностей непечатаемых символов (я не ищу объяснения этому).
command-line
files
binary
statistics
Карл Рихтер
источник
источник
| sort -n
и| sort -n -r
по убыванию соответственно (сортировка не была частью вопроса). Сортировка могла бы быть лучше ...sort -n
здесь имеет гораздо больше смысла. Ответ обновлен.Для больших файлов использование сортировки будет медленным. Я написал короткую программу на C для решения эквивалентной проблемы ( см. Эту суть Makefile с тестами ):
использование:
источник
fgets
получает строку, а не полный буфер. Вы сканируете 4096-байтовый полный буфер для каждой строки, считываемой из стандартного ввода. Вам нужноfread
здесь, а неfgets
.if
блок вокруг операторов printf, который делает вывод более читабельным, если во входном файле нет байтовТаким образом, сигма и CV часто важны при оценке статистических данных содержимого бинарных файлов. Я создал программу cmdline, которая отображает все эти данные в виде круга отклонений байтов от сигмы ascii.
http://wp.me/p2FmmK-96
Может использоваться с grep, xargs и другими инструментами для извлечения статистики.
источник
recode
Программа может сделать это быстро , даже для больших файлов, либо статистики частот либо для байт или для символов различных наборов символов. Например, чтобы посчитать частоты байтов:Внимание - укажите ваш файл для перекодирования в качестве стандартного ввода, иначе он будет молча заменять его на частоты символов!
Используйте
recode utf-8/..count-characters < file
для обработки входного файла как utf-8. Доступно много других наборов символов, и он не будет работать, если файл содержит недопустимые символы.источник
Это похоже на
od
ответ Стефана, но показывает значение ASCII байта. Он также сортируется по частоте / количеству случаев.Я не думаю, что это эффективно, так как многие процессы запускаются, но это хорошо для отдельных файлов, особенно небольших файлов.
источник