Linux
如何計算文件中的字節數,對相同的字節進行分組?
範例:我有文件“mybinaryfile”,十六進制的內容是:
A0 01 00 FF 77 01 77 01 A0
我需要知道這個文件中有多少個 A0 字節,有多少個 01,等等。結果可能是:
A0: 2 01: 3 00: 1 FF: 1 77: 2
有什麼方法可以直接在 shell 中計算,還是我需要用任何語言編寫一個程序來完成這個特定的任務?
這使用od每行顯示一個十六進制值,然後排序和計數:
od -t x1 -w1 -v -An mybinaryfile | sort | uniq -c
(
-w1
是一個擴展,它不是POSIX強制要求的。)
使用 Perl 將 slurped 文件解壓縮為字節數組,然後使用雜湊計算唯一字節數:
printf '\xA0\x01\x00\xFF\x77\x01\x77\x01\xA0' | perl -0777 -nE ' @bytes = unpack("C*",$_) }{ $counts{$_}++ for @bytes; for $k (sort { $a <=> $b } keys %counts) { printf "%02X: %d\n", $k, $counts{$k} } ' 00: 1 01: 3 77: 2 A0: 2 FF: 1
如果有足夠新的版本
List::MoreUtils
可用,您可以使用它的frequency
功能來簡化計數。