리눅스 파일 split으로 쪼개기
리눅스를 사용하다보면, 로그파일이나 머신러닝에서 필요한 데이터셋등 거대한 파일을 주로 다루게 된다.
문제는 이렇게 너무 거대한 파일들은 정상적으로 Editor로 열어보기도 힘들 뿐더러,
파일 입출력이라도 시도했다간, Memory 전체 크기보다 파일의 용량이 크기 때문에 프로그램이 죽어버리게 되는 불상사가 생긴다.
이러한 문제점을 해결하기 위해서, 리눅스는 split이라는 커맨드를 통해 거대한 파일을 다양한 방식으로 sharding 하는 기능을 제공한다. 이번 포스팅에서는 split과 사용 방법에 대해 다룬다.
파일 크기 기준으로 쪼개기
$split -b 크기(byte) 파일명
# Example
$split -b 1024 console_log # 1024 바이트 단위로 분할
$split -b 1k console_log # 1kb 단위로 분할
$split -b 1m console_log # 1mb 단위로 분할
$split -b 1024m console_log #1gb 단위로 분할
# g는 지원안함
파일을 원하는 용량 단위로 나눠주는 역할을 하게 된다. 다만 접두사 설정을 달지 않으면, xaa xab xac 이런식으로 굉장히 분할이 너저분하게 되므로 접두사 설정을 확인하자.
파일명 지정 (prefix 설정)
$split console_log [원하는 접두사]_
# Example
$split console_log log_
위와 같은 설정을 통해 보다 가독성 좋게 파일을 쪼갤 수 있다.
라인 수 기준으로 쪼개기
$split -l [원하는 라인수] [분할할 파일 이름]
# Example
$split -l 10000 console_log log_ #10000라인 단위로 자르기
# TIP
$wc -l console_log # 원본 파일의 총 라인수가 몇인지 알 수 있음
또한 라인수를 기준으로 자르는 것도 가능하다.
이는 머신러닝에서 NLP를 다룰 때 매우 유용하게 사용된다.
Corpus가 일반적으로 행 마다 sentence 하나를 저장하게끔 설계된 경우가 많기 때문에, 애용하는 옵션이다.
쪼갠 파일 합치기
$cat log_* > console_log_merged
split을 통해 나눠진 파일들은 다시 합치는 것 또한 가능하다.
'각종 Tips > Ubuntu' 카테고리의 다른 글
[Ubuntu / 우분투] 같은 이름 프로세스 한번에 종료하기 (0) | 2021.10.09 |
---|---|
[Ubuntu / 우분투] Linux에서 buffer/cache 비우기 (0) | 2021.07.30 |
[Ubuntu / 우분투] 모든 압축파일 해제하기, unzip * (0) | 2021.07.10 |
[Docker / Linux] 도커 볼륨에서 실수로 파일을 삭제했을 때 (0) | 2021.07.03 |
[Docker / Linux] 도커 볼륨의 용량이 너무 클 때 해결법 (0) | 2021.07.03 |