Вот для чего csplit
. С реализацией GNU:
csplit -f file --suppress-matched -z input.txt '/^@/' '{*}'
Максимально примитивно:
i=0; while read NN; do if [[ $NN == "@" ]] ;then i=$(($i+1)) ; else echo $NN >> file$i; fi done < file
Привет
Вы можете использовать awk:
awk -v 'f=file' '/^@/{i++;close(f i);fg=1;next}!fg{next}{print > f i}' infile
Если вы хотите только 2 файла:
awk -v 'f=file' -v 'nb=2' '/^@/{i++;close(f i);fg=1;next}!fg{next}i>nb{exit}{print > f i}' infile