バイナリファイルからバイト発生に関する統計をどのように収集できますか?

バイナリファイルからバイト発生に関する統計をどのように収集できますか?

cat inputfile | sed 's/\(.\)/\1\n/g' | sort | uniq -c

で育ったhttps://stackoverflow.com/questions/4174113/how-to-gather-characters-usage-statistics-in-text-file-using-unix-commandsテキストファイルから文字使用統計を生成するために使用されます。バイナリファイルの場合、文字の代わりに単純バイトが計算されます。つまり、出力は次の形式でなければなりません。

18383 57
12543 44
11555 127
 8393 0

コマンドが引用符で囲まれているのと同じくらい時間がかかることは重要ではありません。

バイナリファイルに文字コマンドを適用すると、出力には印刷できない任意の長い文字シーケンスに関する統計が含まれます(これについての説明は探していません)。

ベストアンサー1

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

おすすめ記事