ファイル内から単一のバイトチャンクを抽出するにはどうすればよいですか?
質問
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
さらに高速
dd bs=<req len> count=1 skip=<req offset> if=input.binary of=output.binary
所属していません StackOverflow