Chciałbym poznać odpowiednik
cat inputfile | sed 's/\(.\)/\1\n/g' | sort | uniq -c
przedstawione w /programming/4174113/how-to-gather-characters-usage-statistics-in-text-file-using-unix-commands do tworzenia statystyk użycia znaków w plikach tekstowych do liczenia plików binarnych proste bajty zamiast znaków, tzn. dane wyjściowe powinny mieć postać
18383 57
12543 44
11555 127
8393 0
Nie ma znaczenia, czy polecenie trwa tak długo, jak polecenie określone dla znaków.
Jeśli zastosuję polecenie znaków do plików binarnych, dane wyjściowe będą zawierały statystyki dotyczące dowolnych długich sekwencji znaków, które nie mogą zostać wydrukowane (nie szukam tego wyjaśnienia).
command-line
files
binary
statistics
Karl Richter
źródło
źródło
| sort -n
i| sort -n -r
dla porządku malejącego (sortowanie nie było częścią pytania). Sortowania można dokonać lepiej ...sort -n
tutaj ma o wiele większy sens. Odpowiedź zaktualizowana.W przypadku dużych plików użycie sortowania będzie wolne. Napisałem krótki program w C, aby rozwiązać równoważny problem ( zobacz poniższą listę dla Makefile z testami ):
stosowanie:
źródło
fgets
dostaje linię, a nie bufor-pełny. Skanujesz pełny bufor o długości 4096 bajtów dla każdej linii odczytanej ze standardowego wejścia. Potrzebujeszfread
tutaj, niefgets
.if
blok wokół instrukcji printf, dzięki czemu dane wyjściowe są bardziej czytelne, jeśli w pliku wejściowym nie występują pewne bajty: gist.github.com/martinvonwittich/…Ponieważ sigma i CV są często ważne przy ocenie danych statystycznych dotyczących zawartości plików binarnych, stworzyłem program cmdline, który wyświetla wszystkie te dane jako ascii krąg bajtowych odchyleń od sigmy.
http://wp.me/p2FmmK-96
Można go używać z grep, xargs i innymi narzędziami do wyodrębniania statystyk.
źródło
recode
Program może to zrobić szybko, nawet w przypadku dużych plików, albo statystyki częstotliwości zarówno dla bajtów lub znaków dla różnych zestawów znaków. Np. Zliczanie częstotliwości bajtów:Uwaga - określ plik do przekodowania jako standardowe wejście, w przeciwnym razie dyskretnie zastąpi go częstotliwościami znaków!
Służy
recode utf-8/..count-characters < file
do traktowania pliku wejściowego jako utf-8. Dostępnych jest wiele innych zestawów znaków i zakończy się niepowodzeniem, jeśli plik zawiera jakiekolwiek niedozwolone znaki.źródło
Jest to podobne do
od
odpowiedzi Stephane'a, ale pokazuje wartość bajtu ASCII. Jest również sortowane według częstotliwości / liczby wystąpień.Nie sądzę, aby było to wydajne, ponieważ uruchomiono wiele procesów, ale jest dobre dla pojedynczych plików, szczególnie małych plików.
źródło