Que tal apenas incrementar um contador de arquivos cada vez que você encontrar a string Request
?
awk '/Request/ {n++; next}; {print > "file"n}' test.txt
Eu tenho um arquivo chamado test.txt
que contém:
....Request....
asaksa
sda
dsad
dsad
....Request...
21mklk
nnm212
mkmr543
849238
....Request...
4392840
kndska
94i0-jkfjdk
smdla
.....Request..
839281
ksndlka
nsc
mcxmzl
Eu quero que todas as linhas entre dois padrões de "Solicitação" sejam impressas em um arquivo -2 diferente como:
arquivo1:
asaksa
sda
dsad
dsad
arquivo2:
21mklk
nnm212
mkmr543
849238
arquivo3:
4392840
kndska
94i0-jkfjdk
smdla
arquivo4:
839281
ksndlka
nsc
mcxmzl
como sábio
Que tal apenas incrementar um contador de arquivos cada vez que você encontrar a string Request
?
awk '/Request/ {n++; next}; {print > "file"n}' test.txt
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
Você está perguntando como usar csplit
, basicamente. Sua tarefa é dividir seu arquivo de entrada em arquivos separados com base em correspondências de contexto.
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
Ou use a variável incorporada NR
para o número de registro:
awk -v RS='\.+Request\.+' '{if (NR==1) next} {print > "file"NR-1 }' test.txt
e não cria um arquivo vazio para file1
.
Este um pouco mais longo remove a linha vazia no início e no final de cada arquivo de saída:
awk -v RS='\.+Request\.+' -v ORS= '{if (NR==1) next} { gsub("^\n",""); print > "file"NR-1 }' test.txt
Tags text-processing