일치하는 두 패턴 사이의 텍스트를 여러 파일로 추출하는 방법은 무엇입니까?

일치하는 두 패턴 사이의 텍스트를 여러 파일로 추출하는 방법은 무엇입니까?

바이너리 파일이 있는데 START 및 END 패턴을 통해 별도의 파일로 분할하고 싶습니다. 입력 예:

yut786y= 3&*%^#$%fsd{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64
asduf hfna089FUAO
AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha
fq9w46tygvkabsdjfnhc :End}}fji8yEBFBOA NFmc

유사한 블록(동일하지는 않음)이 입력 파일에서 반복될 수 있습니다.

결과는 다음과 같습니다.

{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64
asduf hfna089FUAO
AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha
fq9w46tygvkabsdjfnhc :End}}

파일 블록당

awk '/{'\''StartOfFile'\'':/,/End}}/' file > export; 그런 다음 awk '/StartOfFile/{filename=NR".txt"}; {print >filename}' export파일로 분할을 시도했습니다 .

그러나 첫 번째 줄과 마지막 줄에는 여전히 원하지 않는 문자가 있습니다. 어떻게 자르나요? 등장인물 및 수량 불명

답변1

아래와 같이 단일 awk를 사용하여 이 작업을 수행할 수 있습니다.

awk -v RS="{'StartOfFile'" 'NR>1{sub(/End}}.*/,"End}}"); print RS$0>NR-1".txt"}' infile

다음 샘플 입력을 실행했습니다.

{'StartOfFile': Unix.stackexchange.com End}}
yut786y= 3&*%^#$%fsd{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64
asduf hfna089FUAO
AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha
fq9w46tygvkabsdjfnhc :End}}fji8yEBFBOA NFmc

72 YOY398Y 9Y9&y&*t*#&y(*yH{'StartOfFile':uih4yUH OG8YG*^t&^t*&o y(yt&*wt*&(0
jfhi hwuw hfuweh012r892u 098Y&*T*#^98 yHO
OFUH idueg&*#trt& goe
ouh#ye(e#y( geiyfgefyg #O WIBCJHvKKJSLSDOLSL*6
asds:End}}JKDSHFLAJHFLAJSDHFLIAUHFILU7869786

출력은 다음과 같으며 3개의 파일로 나뉩니다.

1.txt

{'StartOfFile': Unix.stackexchange.com End}}

2.txt

{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64
asduf hfna089FUAO
AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha
fq9w46tygvkabsdjfnhc :End}}

3.txt

{'StartOfFile':uih4yUH OG8YG*^t&^t*&o y(yt&*wt*&(0
jfhi hwuw hfuweh012r892u 098Y&*T*#^98 yHO
OFUH idueg&*#trt& goe
ouh#ye(e#y( geiyfgefyg #O WIBCJHvKKJSLSDOLSL*6
asds:End}}

관련 정보