copia valores / linhas de um arquivo dentro de caracteres especiais [duplicados]

0

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
    
por Dimitris Mintis 23.10.2018 / 14:54

3 respostas

2

É para isso que serve o csplit . Com a implementação do GNU:

csplit -f file --suppress-matched -z input.txt '/^@/' '{*}'
    
por 23.10.2018 / 15:22
0

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

    
por 23.10.2018 / 15:11
0

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
    
por 23.10.2018 / 17:33