• ベストアンサー

バイナリファイルの特定のバイナリ値をカウントする方法は?

お世話になります。 質問です。 バイナリファイルから特定のバイナリ値を抽出して、 1バイト単位でカウントする方法はありますか? (例) バイナリファイル"FileA"のバイナリ値0xffをカウントする。 <FileAの中身> 0xfe 0xff 0xff 0x12 0x00 0x00 0xff 0x01 0x00 ↑のファイルから0xffを3カウントした。 $ hexdump -v <ファイル> | grep <ターゲットの値> | wc -w (質問を書いてる現在、linux環境が無いので記憶を頼りに書いてますので間違ってると思います) ↑のようにのような方法は思いつきましたが 「一度テキストにして~grepにパイプして~wcにパイプする」となると、 ファイルサイズに依っては処理に数時間費やしてしまいます。 なので、以下の条件を満たす方法を探しています。 (1)処理の無駄が少ない(バイナリを直接探す方法等) (2)できるだけシンプルにコマンドライン一行で実現 (3)スクリプトファイルを含むソースファイルを作る作業無し よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

256種類それぞれの個数を出すなら、Perl等を使うのが普通そうですが、一種類で良さそうなので、td でもいいですね。 td -c -d $'\xFF' < inputfile | wc -c (FF以外を削除してカウント)

yaha_2007
質問者

お礼

回答ありがとうございます。 週明けに試してみます。 ひとつ質問です。 tdコマンドのマニュアルをお持ちですか? 当方で探しましたが、見当たりませんでした。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

>第二引数の”$”はなんですか? bashの機能で、$'文字列' の中では、C等プログラミング言語の文字列中で使える \ シーケンスが使えます。\n で改行とか、\x55 と16進数とか。 $'\xFF' で、「文字コードが0xFFである1文字」になります。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

#1です。 >回答1さんの td は、tr のタイプミスだと思います。 その通りです!!お騒がせしました。 なぜ d などと打ったのか。。。

yaha_2007
質問者

お礼

度々ご回答ありがとうございます。 tr -c -d $'\xFF' < inputfile | wc -c でよろしいのですね? ひとつ質問ですが、 第二引数の”$”はなんですか?

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

回答1さんの td は、tr のタイプミスだと思います。

yaha_2007
質問者

お礼

ご指摘ありがとうございます。 恥ずかしながらtdでずっと探していました。 htmlのtdタグ大盛況でした。

関連するQ&A