0

内部に複数の jpeg を含むファイルがあります。だから私はそれらを単一のjpegに分割したいと思います。

簡単な部分は、開始を見つけることです: 0xFF0xD8 0xFF0xE1JPG と EXIF データ フィールドの開始をマークします。私の場合は常に開始します。

だから私はこのawkコマンドを見つけました:

awk '/string/{n++}{print >"out" n ".txt" }' final.txt

ファイルを分割します。16進数で使用すると、期待どおりに機能しません:

awk '/0xFF0xD8 0xFF0xE1/{n++}{print >"out" n ".txt" }' final.txt

awk のドキュメントによると、先頭に 0x があるすべての文字列は 16 進数として使用されますが、うまく機能していないようです..

編集:まあ、私はこれを見つけました: https://superuser.com/questions/174362/how-to-split-binary-file-based-on-patternしかし、それは私にとってはうまくいきません... 2 つのファイルを作成する必要があります。ただし、作成されるのは1つだけで、そのサイズは11バイトのみです

4

2 に答える 2

1

awk はバイナリ ファイルを適切に処理できますか? 改行が必要だと思いました。

Perlは正規表現で16進エスケープを使用できます(この回答の基本的な考え方):

#!/usr/bin/perl
undef $/;
$_ = <>;
$n = 0;
for $content (split(/(?=\xFF\xD8\xFF\xE0)/)) {
        open(OUT, ">out" . ++$n . ".txt");
        print OUT $content;
        close(OUT);
}
于 2012-07-02T12:40:15.173 に答える
0

おそらく推奨されるツールは perl ですが、awk は問題なく処理できます。

awk '{print > "out" NR ".jpg"}' RS=$( printf '\xff\xd8\xff\xe0' )
于 2012-07-02T18:20:35.417 に答える