Вы попытались установить режим клавиши Backspace? Взгляните на :help bs
и попробуйте следующее:
set bs=indent,eol,start
Существует также примечание в том разделе справки об использовании :fixdel
"если Ваш <БАКАЛАВР НАУК> или ключ <Del> не делает то, что Вы хотите".
Вы, возможно, также должны установить "нет совместимый" (WRT к vi), таким образом, :set nocp
.
С GNU od
:
od -vtu1 -An -w1 my.file | sort -n | uniq -c
Или более эффективно с perl
(также выводит счет (0) для несуществующих байтов):
perl -ne 'BEGIN{$/ = \4096};
$c[$_]++ for unpack("C*");
END{for ($i=0;$i<256;$i++) {
printf "%3d: %d\n", $i, $c[$i]}}' my.file
Для больших файлов использование сортировки будет медленным. Я написал короткую программу на C для решения эквивалентной проблемы ( см. Эту суть для Makefile с тестами ):
#include <stdio.h>
#define BUFFERLEN 4096
int main(){
// This program reads standard input and calculate frequencies of different
// bytes and present the frequences for each byte value upon exit.
//
// Example:
//
// $ echo "Hello world" | ./a.out
//
// Copyright (c) 2015 Björn Dahlgren
// Open source: MIT License
long long tot = 0; // long long guaranteed to be 64 bits i.e. 16 exabyte
long long n[256]; // One byte == 8 bits => 256 unique bytes
const int bufferlen = BUFFERLEN;
char buffer[BUFFERLEN];
int i;
size_t nread;
for (i=0; i<256; ++i)
n[i] = 0;
do {
nread = fread(buffer, 1, bufferlen, stdin);
for (i = 0; i < nread; ++i)
++n[(unsigned char)buffer[i]];
tot += nread;
} while (nread == bufferlen);
// here you may want to inspect ferror of feof
for (i=0; i<256; ++i){
printf("%d ", i);
printf("%f\n", n[i]/(float)tot);
}
return 0;
}
использование:
gcc main.c
cat my.file | ./a.out
Поскольку среднее, сигма и CV часто важны при оценке статистических данных о содержимом двоичных файлов, я создал программу cmdline, которая строит график всех этих данных в виде ascii круга отклонений байта от сигмы.
http://wp.me/p2FmmK-96
Ее можно использовать с grep, xargs и другими инструментами для извлечения статистики.
Программа recode
может сделать это быстро даже для больших файлов - статистика частоты либо для байтов, либо для символов различных наборов символов. Например. для подсчета частот байтов:
$ echo hello there > /tmp/q
$ recode latin1/..count-characters < /tmp/q
1 000A LF 1 0020 SP 3 0065 e 2 0068 h 2 006C l 1 006F o
1 0072 r 1 0074 t
Внимание - укажите ваш файл, который нужно перекодировать как стандартный ввод, в противном случае он автоматически заменит его частотами символов!
Используйте recode utf-8 / .. count-characters
Это похоже на od Стефана.
ответ, но он показывает значение байта ASCII. Он также сортируется по частоте / количеству появлений.
xxd -c1 my.file|cut -c10-|sort|uniq -c|sort -nr
Я не думаю, что это эффективно, поскольку запускается много процессов, но это хорошо для отдельных файлов, особенно небольших файлов.