![텍스트 파일의 검색 패턴 사이의 모든 줄을 다른 파일로 인쇄](https://linux55.com/image/41199/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EA%B2%80%EC%83%89%20%ED%8C%A8%ED%84%B4%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EC%A4%84%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%9D%B8%EC%87%84.png)
다음을 포함 하는 파일이 있습니다 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