(Linux)バイナリファイルのSUM

7-2. バイナリ処理

sumコマンドでバイナリファイルのByte毎のSUMができます。

sum -s ファイル

~$ seq 10 | perl -ne 'print chr' > a.bin
~$ od -tx1 -An a.bin
 01 02 03 04 05 06 07 08 09 0a
~$ sum -s a.bin
55 1 a.bin
~$ 

上記のように結果は、

SUM値 ブロック番号 ファイル名

の順序でされます(ブロック番号は、512Byte毎に1アップ)

~$ seq 512 | perl -ne 'print chr 1' > b.bin
~$ sum -s b.bin
512 1 b.bin
~$ 
~$ seq 513 | perl -ne 'print chr 1' > c.bin
~$ sum -s c.bin
513 2 c.bin
~$ 

sumコマンドはByte毎ですので、2Byte毎、4Byte毎のSUMを計算したい時は、sumコマンドで求めるのはあきらめて、代わりにhexdump + awkで求めましょう。

~$ hexdump -ve '/2 "%d\n"' c.bin | awk '{sum+=$1}END{print sum}'
65792
~$ hexdump -ve '/4 "%d\n"' c.bin | awk '{sum+=$1}END{print sum}'
2155905153
~$ 

コメント

タイトルとURLをコピーしました