Me gustaría saber el equivalente de
cat inputfile | sed 's/\(.\)/\1\n/g' | sort | uniq -c
presentado en /programming/4174113/how-to-gather-characters-usage-statistics-in-text-file-using-unix-comandos para la producción de estadísticas de uso de caracteres en archivos de texto para el conteo de archivos binarios bytes simples en lugar de caracteres, es decir, la salida debe tener la forma de
18383 57
12543 44
11555 127
8393 0
No importa si el comando tarda tanto como el referenciado para los caracteres.
Si aplico el comando para caracteres a archivos binarios, el resultado contiene estadísticas para secuencias largas arbitrarias de caracteres no imprimibles (no busco explicación para eso).
command-line
files
binary
statistics
Karl Richter
fuente
fuente
| sort -n
y| sort -n -r
en orden descendente respectivamente (la clasificación no era parte de la pregunta). La clasificación podría hacerse mejor ...sort -n
aquí tiene mucho más sentido. Respuesta actualizadaPara archivos grandes, la ordenación será lenta. Escribí un breve programa en C para resolver el problema equivalente ( vea este resumen de Makefile con pruebas ):
uso:
fuente
fgets
obtiene una línea, no un búfer lleno. Está escaneando el búfer completo de 4096 bytes para cada línea leída de stdin. Necesitasfread
aquí, nofgets
.if
bloque alrededor de las declaraciones printf, que hace que la salida sea más legible si algunos bytes no aparecen en el archivo de entrada: gist.github.com/martinvonwittich/…Como media, sigma y CV a menudo son importantes al juzgar los datos estadísticos del contenido de los archivos binarios, he creado un programa cmdline que grafica todos estos datos como un círculo ascii de desviaciones de bytes de sigma.
http://wp.me/p2FmmK-96
Se puede usar con grep, xargs y otras herramientas para extraer estadísticas.
fuente
El
recode
programa puede hacer esto rápidamente incluso para archivos grandes, ya sea estadísticas de frecuencia, ya sea para bytes o para los caracteres de varios conjuntos de caracteres. Por ejemplo, para contar frecuencias de bytes:Precaución : especifique su archivo para recodificarlo como entrada estándar; de lo contrario, lo reemplazará en silencio con las frecuencias de caracteres.
Use
recode utf-8/..count-characters < file
para tratar el archivo de entrada como utf-8. Hay muchos otros juegos de caracteres disponibles y fallará si el archivo contiene caracteres ilegales.fuente
Esto es similar a la
od
respuesta de Stephane, pero muestra el valor ASCII del byte. También se ordena por frecuencia / número de ocurrencias.No creo que esto sea eficiente ya que se inician muchos procesos, pero es bueno para archivos individuales, particularmente archivos pequeños.
fuente