텍스트 파일의 검색 패턴 사이의 모든 줄을 다른 파일로 인쇄

텍스트 파일의 검색 패턴 사이의 모든 줄을 다른 파일로 인쇄

다음을 포함 하는 파일이 있습니다 test.txt.

....Request....
asaksa
sda
dsad
dsad
....Request...
21mklk
nnm212
mkmr543
849238
....Request...
4392840
kndska
94i0-jkfjdk
smdla
.....Request..
839281
ksndlka
nsc
mcxmzl

두 "요청" 패턴 사이의 모든 줄을 서로 다른 -2 파일로 인쇄하고 싶습니다. 예를 들면 다음과 같습니다.

파일 1:

asaksa
sda
dsad
dsad

파일 2:

21mklk
nnm212
mkmr543
849238

파일 3:

4392840
kndska
94i0-jkfjdk
smdla

파일 4:

839281
ksndlka
nsc
mcxmzl

비슷하게

답변1

문자열이 발견될 때마다 Request파일 카운터를 증가시키는 것은 어떻습니까 ?

awk '/Request/ {n++; next}; {print > "file"n}' test.txt

답변2

csplit -f file -z --suppress-matched - '/Request/' '{*}' <<\DATA
....Request....
asaksa
sda
dsad
dsad
....Request...
21mklk
nnm212
mkmr543
849238
....Request...
4392840
kndska
94i0-jkfjdk
smdla
.....Request..
839281
ksndlka
nsc
mcxmzl
DATA

기본적으로 어떻게 사용하는지 물어보시는데요 csplit. 그 임무는 문맥 일치에 따라 입력 파일을 별도의 파일로 분할하는 것입니다.

ls 

file00  file01  file02  file03

cat file00

asaksa
sda
dsad
dsad

cat file*

asaksa
sda
dsad
dsad
21mklk
nnm212
mkmr543
849238
4392840
kndska
94i0-jkfjdk
smdla
839281
ksndlka
nsc
mcxmzl

답변3

NR또는 레코드 번호에 내장 변수를 사용하십시오 .

awk -v RS='\\.+Request\\.+'  '{if (NR==1) next}  {print > "file"NR-1 }' test.txt

그리고 file1.

약간 더 긴 이 파일은 각 출력 파일의 시작과 끝에서 빈 줄을 제거합니다.

awk -v RS='\\.+Request\\.+' -v ORS= '{if (NR==1) next}  { gsub("^\n",""); print > "file"NR-1 }' test.txt

관련 정보