バイナリファイルの最初の10バイトのみを取得する方法


80

ファイルのヘッダー(最初の10バイト)を取得してから、別のセクションで最初の10バイトを除くすべてを取得する必要があるbashスクリプトを作成しています。これらはバイナリファイルであり、最初の10バイト全体に「」\0\n「」が含まれる可能性があります。ほとんどのユーティリティはASCIIファイルで動作するようです。このタスクを達成するための良い方法は何ですか?


回答:


144

すでに述べたように、最初の10バイトを取得するには:

head -c 10

最初の10バイトを除くすべてを取得するには(少なくともGNUtailでは):

tail -c+11

3
はい。私はこのddアイデアが気に入りましたが、このオプションではバッファサイズを変更する必要がないため、巨大なファイルでうまく機能します。ありがとう。
user1 2010

42

head -c 10 ここで正しいことをします。


9
この答えが最初のものであったことは興味深いです、それは正しいです、しかし他のものははるかに多くの賛成票を持っています。
ロバート2016

34

このddコマンドを使用して、バイナリファイルから任意のバイト数をコピーできます。

dd if=infile of=outfile1 bs=10 count=1
dd if=infile of=outfile2 bs=10 skip=1

1
これは機能しますが、かなり遅いです。10のbsはこれらの巨大なファイルを殺しています。最初の10バイトをスキップするより速い方法はありますか?とてもシンプルなようです。
user1 2010

dd 信頼できません。さまざまな理由で、要求されたよりも少ないバイトを読み取る場合があります。
ceving

@cevingは、これらの理由の少なくとも1つに言及できますか?私はあなたを信じているかどうかわかりません。
マークランサム

次の例では、1の代わりに2を印刷する:{ printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c
ceving

説明があり、ここここに
ceving
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.