다음과 같은 파일이 있습니다
@
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