Ich würde gerne das Äquivalent von wissen
cat inputfile | sed 's/\(.\)/\1\n/g' | sort | uniq -c
Präsentiert in /programming/4174113/how-to-gather-characters-usage-statistics-in-text-file-using-unix-commands zur Erstellung von Zeichenverwendungsstatistiken in Textdateien für die Zählung von Binärdateien einfache Bytes anstelle von Zeichen, dh die Ausgabe sollte in Form von erfolgen
18383 57
12543 44
11555 127
8393 0
Es spielt keine Rolle, ob der Befehl so lange dauert wie der angegebene für Zeichen.
Wenn ich den Befehl für Zeichen auf Binärdateien anwende, enthält die Ausgabe Statistiken für beliebig lange Sequenzen nicht druckbarer Zeichen (ich suche keine Erklärung dafür).
command-line
files
binary
statistics
Karl Richter
quelle
quelle
| sort -n
und| sort -n -r
jeweils um absteigend (Sortierung war nicht Teil der Frage). Das Sortieren könnte besser sein ...sort -n
macht die Verwendung hier viel mehr Sinn. Antwort aktualisiert.Bei großen Dateien ist die Sortierung langsam. Ich habe ein kurzes C-Programm geschrieben, um das äquivalente Problem zu lösen ( siehe diese Übersicht für Makefile mit Tests ):
Verwendung:
quelle
fgets
erhält eine Zeile, nicht einen Puffer voll. Sie scannen den 4096-Byte-Vollpuffer für jede Zeile, die von stdin gelesen wird. Du brauchstfread
hier nichtfgets
.if
Block um die printf-Anweisungen hinzugefügt , der die Ausgabe lesbarer macht, wenn einige Bytes in der Eingabedatei nicht vorkommen: gist.github.com/martinvonwittich/…Da Sigma und CV häufig wichtig sind, um statistische Daten des Inhalts von Binärdateien zu beurteilen, habe ich ein cmdline-Programm erstellt, das alle diese Daten als ASCII-Kreis von Byte-Abweichungen von Sigma grafisch darstellt.
http://wp.me/p2FmmK-96
Es kann mit grep, xargs und anderen Tools zum Extrahieren von Statistiken verwendet werden.
quelle
Das
recode
Programm kann dies auch für große Dateien schnell erledigen, entweder mit Häufigkeitsstatistiken für Bytes oder für die Zeichen verschiedener Zeichensätze. ZB zum Zählen von Bytefrequenzen:Achtung - geben Sie an, dass Ihre Datei als Standardeingabe neu codiert werden soll, sonst wird sie stillschweigend durch die Zeichenhäufigkeiten ersetzt!
Verwenden Sie
recode utf-8/..count-characters < file
diese Option, um die Eingabedatei als utf-8 zu behandeln. Viele andere Zeichensätze sind verfügbar, und es schlägt fehl, wenn die Datei ungültige Zeichen enthält.quelle
Dies ähnelt Stephanes
od
Antwort, zeigt jedoch den ASCII-Wert des Bytes. Es ist auch nach Häufigkeit / Anzahl der Vorkommen sortiert.Ich denke nicht, dass dies effizient ist, da viele Prozesse gestartet werden, aber es ist gut für einzelne Dateien, insbesondere kleine Dateien.
quelle