web-dev-qa-db-ja.com

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

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

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

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

magicprogram --offset 102567 --size 253 < input.binary > output.binary
61
DanM

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バイトに生成します。これにより、抽出するバイト数が多い場合、非常に遅くなります。

31
ChronoTrigger

head -c + tail -c

効率がddとどのように比較されるかわかりませんが、楽しいです:

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

2番目から3バイトを選択します。

234

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

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

3
Joe

さらに速く

dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary 
1
Albert Burbea