2012-07-02 2 views
0

내부에 여러 개의 jpeg가있는 파일이 있습니다. 그래서 그들을 하나의 jpeg로 나누고 싶습니다.awk가 16 진수 문자열로 나뉘어졌습니다.

쉬운 부분은 시작 부분을 찾는 것입니다. 0xFF0xD8 0xFF0xE1은 JPG의 시작 부분과 EXIF ​​데이터 필드를 표시합니다. 제 경우에는 항상 시작 부분에 있습니다.

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

이 파일을 분할하려면 :

그래서 나는이 awk 명령을 발견했다. 예상대로 내가 진수와 함께 사용할 때 작동하지 않는 :

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 파일을 만들어야 만 하나만 11 바이트 큰 생성

+2

'0x'입니다 16 진수 값의 텍스트 표현의 시작. 그러나 파일이 바이너리라면 찾지 못할 것입니다. – mouviciel

+0

JFIF는 다른 곳에서는이 시퀀스를 가지고 있지 않습니까? –

+0

은 내가 나던하지 아니하지만 난 검색 순서에 좀 더 바이트를 추가 할 수 있으며 AWK의 의사가 말했다 내가 처음 바이트'FF D8 FF E0' – reox

답변

1

정말 이진 파일을 처리 awk가? 나는 그것이 개조를 기대할 것이라고 생각했다.

펄이 사용할 수있는 진수는 정규 표현식에에서 탈출 (기본 this answer에서 아이디어) :

#!/usr/bin/perl 
undef $/; 
$_ = <>; 
$n = 0; 
for $content (split(/(?=\xFF\xD8\xFF\xE0)/)) { 
     open(OUT, ">out" . ++$n . ".txt"); 
     print OUT $content; 
     close(OUT); 
} 
+0

네를'이 0x'를 읽고 없습니다! 감사! – reox

0

펄 선호하는 도구 아마도 경우,하지만, AWK는 잘 처리 할 수 ​​:

awk '{print > "out" NR ".jpg"}' RS=$(printf '\xff\xd8\xff\xe0') 
관련 문제