파일 [중복]에서 특수 문자 내의 값/줄 복사

파일 [중복]에서 특수 문자 내의 값/줄 복사

다음과 같은 파일이 있습니다

@
0 60
0 60
0 1
0 1
0 3
0 0
@
0 0
0 0
0 0
0 0
@
.
.
.
@

여기에서 첫 번째 @에서 두 번째 @까지의 값/라인으로 file1을 생성한 다음 두 번째 @에서 세 번째 @까지의 값/라인으로 다음 file2를 생성하려고 하므로 file1에는 다음과 같은 출력이 있어야 합니다.

0 60
0 60
0 1
0 1
0 3
0 0

파일 2에는 다음과 같은 출력이 있어야 합니다.

0 0
0 0
0 0
0 0

답변1

그것이 csplit목적입니다. GNU를 통해 구현됨:

csplit -f file --suppress-matched -z input.txt '/^@/' '{*}'

답변2

가능한 한 독창적인 것:

i=0; while read NN; do if [[ $NN == "@" ]] ;then i=$(($i+1)) ; else echo $NN >> file$i; fi done < file

안녕하세요

답변3

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

관련 정보