우분투 실전 명령어 | split/csplit 파일 분할
대용량 로그나 CSV를 한 번에 다루기 어려울 때는 split, csplit로 파일을 잘게 나눠서 처리하면 훨씬 안정적으로 작업할 수 있습니다. 특히 분석 파이프라인을 돌리거나 전송 제한이 있는 환경에서 유용합니다.
언제 쓰는가
- 수 GB 로그를 배치 작업 단위로 나눠 병렬 처리할 때
- 파일 업로드 제한 때문에 일정 크기 이하로 분할해야 할 때
- 헤더 구간과 본문 구간을 분리해서 따로 점검할 때
바로 쓰는 명령어
# 200MB 단위로 분할 (xaa, xab ... 생성)
split -b 200M app.log app.log.part.
# 100000줄 단위로 분할
split -l 100000 access.log access.log.lines.
# 숫자 접미사 사용(000,001...)
split -d -a 3 -l 50000 access.log access.log.chunk.
# 날짜 패턴을 기준으로 csplit 분할
csplit -f nginx- -b '%02d.log' access.log '/^2026-02-18/' '{*}'
# 분할 파일 무결성 확인
ls -lh app.log.part.*
wc -l access.log access.log.chunk.*
핵심 옵션/패턴
- split -b 200M: 바이트 기준으로 고정 크기 분할을 할 때 가장 단순하다
- split -l 100000: 라인 수 기준으로 균등 분할할 때 안전하다
- split -d -a 3: 숫자 접미사로 정렬/재조합 자동화를 쉽게 만든다
- csplit '/정규식/': 특정 패턴이 시작되는 지점을 경계로 파일을 자를 수 있다
- 분할 후 cat part.* > merged.log로 재조합 가능하지만, 순서 보장을 위해 접미사 형식을 먼저 통일해두는 편이 좋다
명령 출력 예시
$ split -d -a 3 -l 50000 access.log access.log.chunk.
$ ls access.log.chunk.* | head
access.log.chunk.000
access.log.chunk.001
access.log.chunk.002
access.log.chunk.003
$ wc -l access.log access.log.chunk.*
200341 access.log
50000 access.log.chunk.000
50000 access.log.chunk.001
50000 access.log.chunk.002
50341 access.log.chunk.003
350682 total
자주 하는 실수
- split 뒤에 프리픽스를 주지 않아 xaa, xab 파일이 작업 디렉터리에 섞여 관리가 어려워진다
- csplit 정규식을 너무 넓게 잡아 의도보다 많은 조각이 생긴다
- 원본 백업 없이 바로 분할 후 삭제해서 재처리가 필요할 때 복구가 어렵다
- 분할 파일 전송 뒤 순서대로 합치지 않아 데이터가 꼬인다
검증 방법
# 1) 분할 파일 개수/크기 확인
ls -lh access.log.chunk.*
# 2) 라인 수 합계 검증
wc -l access.log access.log.chunk.*
# 3) 재조합 후 해시 비교
cat access.log.chunk.* > access.log.merged
sha256sum access.log access.log.merged
해시가 같으면 분할과 재조합이 정확히 끝난 것입니다. 자동화 파이프라인에서는 이 검증 단계를 마지막 게이트로 넣어두면 안정성이 크게 올라갑니다.
운영 팁
- 배치 처리용 분할은 숫자 접미사와 고정 자릿수(-d -a)를 기본값으로 잡아두세요
- 분할 대상이 텍스트인지 바이너리인지 먼저 확인하고, 텍스트면 라인 기준 분할을 우선 검토하는 편이 안전합니다
- 오래된 분할 파일은 별도 디렉터리로 이동하거나 보존 기간 정책을 적용해 디스크 누수를 막으세요
출처
- GNU coreutils 문서
- Ubuntu Manpages
- The Linux Documentation Project