리눅스 csplit 명령어 완벽 가이드: 패턴 기반 텍스트 파일 분할법

개요

대용량 텍스트 파일이나 로그 파일을 원하는 패턴이나 줄 번호 단위로 깔끔하게 분리하고 싶을 때 csplit 명령어를 사용합니다. split과 달리 내용 기반의 정규표현식으로 정교하게 파일을 분할하는 실무 핵심 사용법을 실습과 함께 알아봅니다.

줄 번호를 기준으로 텍스트 파일 기본 분할하기

csplit 명령어 실습을 위한 전용 디렉터리를 생성하고 작업 위치를 이동하기 위해 mkdir -p ~/csplit_lab && cd ~/csplit_lab 명령어를 실행합니다.

mkdir -p ~/csplit_lab && cd ~/csplit_lab

파일 분할 테스트에 사용할 15줄짜리 예제 텍스트 파일을 생성하기 위해 seq -f "Line %g: System status normal" 1 15 > server_status.txt 명령어를 실행합니다.

seq -f “Line %g: System status normal” 1 15 > server_status.txt

생성된 예제 파일의 상위 5개 줄을 확인하기 위해 head -n 5 server_status.txt 명령어를 실행합니다.

head -n 5 server_status.txt

csplit 명령어는 특정 줄 번호나 정규식 패턴을 기준으로 텍스트 파일을 여러 파일로 분할합니다.
csplit server_status.txt 6 11 명령어는 6번째 줄과 11번째 줄을 경계로 지정하여 원본 파일을 15행, 610행, 11~15행의 세 파일로 나눕니다.
실행 결과로 출력되는 숫자는 분할되어 생성된 각 파일의 바이트(Byte) 크기입니다.
⚙️ [주요 옵션]

-f PREFIX : 분할 파일명의 기본 접두사(xx)를 지정한 문자열로 변경합니다.
-b FORMAT : 접미사 번호 서식을 printf 형식에 맞춰 지정합니다.
-n DIGITS : 파일명 접미사 번호의 자릿수를 지정합니다(기본값: 2).
-s : 분할 파일의 바이트 크기를 화면에 출력하지 않고 조용히 처리합니다.
-z : 크기가 0바이트인 빈 출력 파일이 생성되지 않도록 제외합니다.
-k : 분할 작업 중 오류가 발생해도 이미 생성된 파일을 삭제하지 않고 보존합니다.

csplit server_status.txt 6 11

csplit 실행 결과로 생성된 파일들을 확인하기 위해 ls -l xx* 명령어를 실행합니다.
기본 접두사 xx에 두 자리 숫자가 붙은 xx00, xx01, xx02 세 개의 파일이 각 구간별 크기대로 정상 생성되었음을 확인할 수 있습니다.

ls -l xx*

정규표현식 패턴 매칭으로 섹션별 파일 자동 분할하기

정규표현식 패턴 분할 실습에 사용할 여러 섹션이 포함된 텍스트 파일을 생성하기 위해 cat << 'EOF' > reports.txt 명령어를 실행합니다.

cat « ‘EOF’ > reports.txt
SECTION_A
CPU utilization: 32%
Memory utilization: 55%
SECTION_B
Disk space free: 120GB
Inode usage: 40%
SECTION_C
Network in: 1.2Gbps
Network out: 850Mbps
EOF

생성한 예제 파일의 전체 내용과 섹션 구성을 확인하기 위해 cat reports.txt 명령어를 실행합니다.
SECTION_A, SECTION_B, SECTION_C로 나뉜 시스템 점검 결과 데이터가 정상적으로 저장된 것을 확인할 수 있습니다.

cat reports.txt

csplit reports.txt '/SECTION_/' '{*}' 명령어는 /SECTION_/ 정규표현식 패턴이 나타나는 줄을 기준으로 파일을 나누며, { * } 반복 지정자를 통해 파일 끝까지 일치하는 모든 패턴을 찾아 분할합니다.
실행 결과로 출력된 숫자는 분할 생성된 각 파일의 바이트 크기이며, 첫 번째 패턴 이전의 빈 영역(0바이트)을 포함해 각 섹션별 크기가 순서대로 표시됩니다.

csplit reports.txt ‘/SECTION_/’ ‘{*}’

분할된 파일들의 내부 내용을 확인하기 위해 head -n 20 xx* 명령어를 실행합니다.
첫 번째 패턴 이전의 빈 파일인 xx00을 시작으로, 각 섹션의 데이터 블록이 xx01, xx02, xx03 파일에 나뉘어 정상 저장되었음을 확인할 수 있습니다.

head -n 20 xx*

출력 파일명 접두사 및 자릿수 포맷 커스터마이징

파일명 접두사와 자릿수 서식 실습에 사용할 로그 예제 파일을 생성하기 위해 cat << 'EOF' > app.log 명령어를 실행합니다.

cat « ‘EOF’ > app.log
[ERROR] 2026-10-25 DB connection timeout
[INFO] Retrying connection attempt 1
[ERROR] 2026-10-25 Authentication failure
[WARN] High memory consumption detected
[ERROR] 2026-10-25 Redis cache cluster down
EOF

csplit -f log_part_ -n 3 app.log '/\[ERROR\]/' '{*}' 명령어는 [ERROR] 문자열 패턴을 기준으로 파일을 분할하며, -f log_part_ 옵션으로 출력 파일명 접두사를 지정하고 -n 3 옵션으로 파일명 번호 자릿수를 세 자리로 설정합니다.
화면에 출력된 숫자는 분할되어 생성된 각 파일의 바이트 크기를 의미합니다.

csplit -f log_part_ -n 3 app.log ‘/[ERROR]/’ ‘{*}’

생성된 분할 파일들의 이름과 세부 정보를 확인하기 위해 ls -l log_part_* 명령어를 실행합니다.
기본 접두사 대신 설정한 log_part_ 접두사와 세 자리 숫자 포맷이 반영되어 log_part_000부터 log_part_003까지의 파일이 정상적으로 생성된 것을 확인할 수 있습니다.

ls -l log_part_*

오류 발생 시 파일 유지(-k)와 빈 파일 제거(-z) 실무 옵션

csplit -z -k -f clean_part_ reports.txt '/SECTION_/' '{*}' 명령어는 크기가 0바이트인 빈 분할 파일의 생성을 방지하는 -z 옵션과 오류 발생 시에도 이미 생성된 분할 파일을 삭제하지 않고 유지하는 -k 옵션을 함께 적용하여 파일을 분할합니다.
첫 번째 패턴 이전의 불필요한 빈 파일이 제외되었기 때문에 0바이트 출력 없이 실제 데이터가 포함된 세 개 파일의 크기(55, 50, 51바이트)만 화면에 출력됩니다.

csplit -z -k -f clean_part_ reports.txt ‘/SECTION_/’ ‘{*}’

생성된 분할 파일 목록과 파일별 용량을 확인하기 위해 ls -l clean_part_* 명령어를 실행합니다.
-z 옵션의 영향으로 앞선 실습과 달리 빈 파일이 생성되지 않고, clean_part_00부터 clean_part_02까지 총 3개의 파일만 깔끔하게 저장된 것을 확인할 수 있습니다.

ls -l clean_part_*

첫 번째 분할 파일에 데이터가 정상적으로 저장되었는지 확인하기 위해 cat clean_part_00 명령어를 실행합니다.
빈 파일이 배제되면서 첫 번째 분할 파일인 clean_part_00에 곧바로 SECTION_A의 내용이 시작 부분부터 누락 없이 온전하게 저장되었음을 확인할 수 있습니다.

cat clean_part_00

실습 과정에서 생성된 모든 예제 파일과 테스트 작업 디렉터리를 정리하기 위해 rm -rf ~/csplit_lab 명령어를 실행합니다.

rm -rf ~/csplit_lab

지금까지 리눅스 환경에서 특정 패턴과 정규식을 기준으로 텍스트 파일을 분할하는 csplit 명령어의 핵심 사용법과 옵션을 살펴보았습니다.
단순 크기나 줄 수 단위 분할을 넘어, 대용량 로그 분석이나 텍스트 데이터 처리 시 csplit을 유용하게 활용해보시기 바랍니다.