CSV와 같은 데이터 파일이 1GB 이상으로 파일 사이즈가 너무 큰 경우 작은 파일 크기로 분할해야 할 때가 있습니다. 또는 디버깅용 로그 파일이 너무 큰 경우 작은 파일 크기로 분할하는 경우도 종종 있습니다. 이러한 파일 분할에 사용할 수 있는 유틸리티가 split입니다. split은 리눅스에서는 coreutils 패키지에서 설치되고 Linux (우분투, CentOS) 뿐 아니라 Mac OS에서 사용할 수 있고, Windows에서는 WSL이나 Cygwin 환경에서 사용할 수 있습니다.
split 사용 예
- 대용량 1GB CSV 파일을 100MB 단위로 분할
split 사용법과 옵션
split [OPTION]... [FILE [PREFIX]]
→ FILE을 PREFIXaa, PREFIXab, PREFIXac로 분할함 (default 값 사용: 1000 line)
split 옵션
-a, --suffix-length=N generate suffixes of length N (default 2)
--additional-suffix=SUFFIX append an additional SUFFIX to file names
-b, --bytes=SIZE put SIZE bytes per output file
-C, --line-bytes=SIZE put at most SIZE bytes of records per output file
-d use numeric suffixes starting at 0, not alphabetic
--numeric-suffixes[=FROM] same as -d, but allow setting the start value
-x use hex suffixes starting at 0, not alphabetic
--hex-suffixes[=FROM] same as -x, but allow setting the start value
-e, --elide-empty-files do not generate empty output files with '-n'
--filter=COMMAND write to shell COMMAND; file name is $FILE
-l, --lines=NUMBER put NUMBER lines/records per output file
-n, --number=CHUNKS generate CHUNKS output files; see explanation below
-t, --separator=SEP use SEP instead of newline as the record separator; '\0' (zero) specifies the NUL character
-u, --unbuffered immediately copy input to output with '-n r/...'
* SIZE argument is an integer and optional unit (example: 10K is 10*1024). Units are K,M,G,T,P,E,Z,Y
split 사용 예
bigfile.mp4 1024MB 크기로 기준으로 smallfile_aa, smallfile_ab, smallfile_ac로 분할
$ split -b 1024m bigfile.mp4 smallfile_
bigfile.mp4 1024MB 크기로 기준으로 smallfile_aa, smallfile_ab, smallfile_ac로 분할하고, mp4 확장자 추가
$ split -b 1024m --additional-suffix=.mp4 bigfile.mp4 smallfile_
bigfile.mp4 1024MB 크기로 기준으로 smallfile_00, smallfile_01, smallfile_02로 분할하고, mp4 확장자 추가
$ split -b 1024m --additional-suffix=.mp4 --numeric-suffixes=0 bigfile.mp4 smallfile_
bigfile.mp4 1024MB 크기로 기준으로 smallfile_000, smallfile_001, smallfile_002로 surffix 길이가 3인 파일로 분할하고, mp4 확장자 추가
$ split -b 1024m --additional-suffix=.mp4 --numeric-suffixes=0 -a 3 bigfile.mp4 smallfile_
bigtextfile.txt 200MB 크기로 기준으로 smallfile_00, smallfile_01, smallfile_02로 분할하고, .txt 확장자 추가
$ split -C 200m --additional-suffix=.txt --numeric-suffixes=0 bigtextfile.txt smallfile_
bigtextfile.txt 파일을 5개로 분할하고 2자리수 숫자 surffix와 확장자 txt파일로 저장함
$ split --number=5 --additional-suffix=.txt --numeric-suffixes=0 bigtextfile.txt smallfile_
파일 합치치는 명령어 cat
split이 파일을 분할하는 용도라면 cat 명령어를 사용해서 파일 하나로 합칠 수 있습니다.
$ cat SPITED_FILES_AS_LIST > NEW_FILE
→ SPITED_FILES_AS_LIST 을 NEW_FILE로 합치기
$ ls myfile_part* | sort | xargs cat > myfile_merge
→ myfile_part* 파일을 sort 하고, cat으로 파일 합치기
관련 글:
[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - 우분투 20.04에서 MariaDB 설치 및 기본 동작 확인 명령어
[SW 개발/REST API] - 자주 사용하는 curl 명령어 옵션과 예제
[블로그 관리/티스토리 블로그 관리] - 티스토리 글이 의도치 않은 삭제된 경우 구글 검색 Cache 를 이용해서 복구하기
[개발환경/우분투] - 우분투20.04에서 Bluetooth 5.0 USB 동글 설치: Realtek 8761B Chipset
[개발환경/Tips] - youtube-dl로 Youtube에서 MP3 다운로드 시 아티스트와 앨범 아트(meta data) 포함시키는 방법
[SW 개발/Python] - Python으로 압축 파일 다루기: Zipfile 과 shutil.make_archive()
[SW 개발/Python] - Python: xmltodict를 활용하여 XML를 JSON으로 변환하는 방법
[개발환경/우분투] - 우분투 20.04에서 Grub 편집: grub-customizer 와 Grub theme 설정
댓글