ファイル内から単一のバイトチャンクを抽出するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1423346

  •  07-07-2019
  •  | 
  •  

質問

Linuxデスクトップ(RHEL4)で、大きなファイル(> 1ギガバイト)から一定範囲のバイト(通常1000未満)を抽出したい。ファイルへのオフセットとチャンクのサイズがわかっています。

これを行うためのコードを書くことはできますが、コマンドラインソリューションはありますか?

理想的には、次のようなものです:

magicprogram --offset 102567 --size 253 < input.binary > output.binary
役に立ちましたか?

解決

dd を試してください:

dd skip=102567 count=253 if=input.binary of=output.binary bs=1

他のヒント

これは古い質問ですが、大きなバイトチャンクに適した dd コマンドの別のバージョンを追加したいと思います。

dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes 

$ offset および $ bytes はバイト単位の数字です。

トーマスの受け入れられた答えとの違いは、 bs = 1 がここに表示されないことです。 bs = 1 は、入力および出力ブロックサイズを1バイトにします。これにより、抽出するバイト数が大きい場合、非常に遅くなります。

ddコマンドは、これらすべてを実行できます。呼び出しの一部としてシークおよび/またはスキップパラメーターを確認します。

head + tail

効率的に dd と比較する方法はわかりませんが、楽しいです:

printf "123456789" | tail -c+2 | head -c3

2番目から3バイトをピック:

234

参照: https://stackoverflow.com/a/1272995/895245

さらに高速

dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top