Linux

如何計算文件中的字節數,對相同的字節進行分組?

  • March 31, 2020

範例:我有文件“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功能來簡化計數。

引用自:https://unix.stackexchange.com/questions/527521