J'aimerais savoir l'équivalent de
cat inputfile | sed 's/\(.\)/\1\n/g' | sort | uniq -c
présenté dans /programming/4174113/how-to-gather-characters-usage-statistics-in-text-file-using-unix-commands pour la production de statistiques d'utilisation des caractères dans les fichiers texte pour le comptage des fichiers binaires octets simples au lieu de caractères, c'est-à-dire que la sortie doit être sous la forme de
18383 57
12543 44
11555 127
8393 0
Peu importe si la commande prend autant de temps que celle référencée pour les caractères.
Si j'applique la commande de caractères aux fichiers binaires, la sortie contient des statistiques pour de longues séquences arbitraires de caractères non imprimables (je ne cherche pas d'explication à cela).
la source
| sort -n
et| sort -n -r
pour l'ordre décroissant respectivement (le tri ne faisait pas partie de la question). Le tri pourrait être mieux fait ...sort -n
ici a beaucoup plus de sens. Réponse mise à jour.Pour les fichiers volumineux, le tri sera lent. J'ai écrit un petit programme C pour résoudre le problème équivalent ( voir cet essentiel pour Makefile avec des tests ):
usage:
la source
fgets
obtient une ligne, pas un tampon plein. Vous analysez le tampon complet de 4096 octets pour chaque ligne lue depuis stdin. Vous avez besoinfread
ici, nonfgets
.if
bloc autour des instructions printf, ce qui rend la sortie plus lisible si certains octets ne se produisent pas dans le fichier d'entrée: gist.github.com/martinvonwittich/…Comme moyenne, sigma et CV sont souvent importants pour juger les données statistiques du contenu des fichiers binaires, j'ai créé un programme cmdline qui représente toutes ces données comme un cercle ascii de déviations d'octets par rapport à sigma.
http://wp.me/p2FmmK-96
Il peut être utilisé avec grep, xargs et d'autres outils pour extraire des statistiques.
la source
Le
recode
programme peut le faire rapidement même pour des fichiers volumineux, soit des statistiques de fréquence soit pour les octets, soit pour les caractères de différents jeux de caractères. Par exemple, pour compter les fréquences d'octets:Attention - spécifiez votre fichier à recoder comme entrée standard, sinon il le remplacera silencieusement par les fréquences des caractères!
Utilisez
recode utf-8/..count-characters < file
pour traiter le fichier d'entrée comme utf-8. De nombreux autres jeux de caractères sont disponibles et il échouera si le fichier contient des caractères illégaux.la source
Ceci est similaire à la
od
réponse de Stéphane mais il montre la valeur ASCII de l'octet. Il est également trié par fréquence / nombre d'occurrences.Je ne pense pas que ce soit efficace car de nombreux processus sont démarrés mais c'est bon pour les fichiers simples, en particulier les petits fichiers.
la source