É para isso que serve o csplit
. Com a implementação do GNU:
csplit -f file --suppress-matched -z input.txt '/^@/' '{*}'
Eu tenho um arquivo que se parece com isso
@
0 60
0 60
0 1
0 1
0 3
0 0
@
0 0
0 0
0 0
0 0
@
.
.
.
@
e a partir disso eu quero criar o arquivo1 com os valores / linhas do primeiro @ para o segundo @ e, em seguida, um próximo arquivo2 com os valores / linhas do segundo @ para o terceiro @ então o arquivo 1 deve ter a seguinte saída
0 60
0 60
0 1
0 1
0 3
0 0
o arquivo 2 deve ter a seguinte saída
0 0
0 0
0 0
0 0
É para isso que serve o csplit
. Com a implementação do GNU:
csplit -f file --suppress-matched -z input.txt '/^@/' '{*}'
O mais primitivo possível:
i=0; while read NN; do if [[ $NN == "@" ]] ;then i=$(($i+1)) ; else echo $NN >> file$i; fi done < file
Oi
Você pode usar o awk:
awk -v 'f=file' '/^@/{i++;close(f i);fg=1;next}!fg{next}{print > f i}' infile
Se você quiser apenas dois arquivos:
awk -v 'f=file' -v 'nb=2' '/^@/{i++;close(f i);fg=1;next}!fg{next}i>nb{exit}{print > f i}' infile
Tags text-processing