티스토리 뷰

HowTo - 대용량 파일 분할 저장 방법 (Unix)

IT 관련 종사자라면 한 번쯤 경험해보셨을 난감한 상황, 문제가 발생한 어플리케이션을 분석하기 위해 로그 파일을 읽어 들여도 메모리 부족 또는 너무 큰 파일 사이즈로 인해 정상적으로 열리지 않는 문제점을 해결하기 위해 지난 번 글에서는 윈도우 서버에서 운영중인 대용량 오라클 로그 파일을 분할하여 확인하는 방법을 살펴보았습니다.

윈도우에서는 별도의 프로그램을 사용하거나, 직접 쉘 또는 배치 파일을 만들어 사용해야 했지만, 유닉스에서는 어떤 프로그램을 사용해야 할까요?

유닉스(리눅스) 서버를 운영하고 있다면 윈도우와는 달리 명령어 한 줄로 편리하게 큰 파일을 분할할 수 있어 매우 편리합니다.

개인적으로 윈도우, 리눅스 보다 쉽고 관리가 편리한 유닉스 시장이 클라우드 바람을 타고 승승장구중인 x86 서버에 밀려 매년 시장 점유율이 20% 가량 하락하고 있는 현실이 참 안타깝습니다.


How to Split large files into a number of smaller files

UNIX에서 큰 파일을 작은 파일로 분할하기 위해서는 split 명령어를 사용하면 됩니다. 분할하려는 대용량 파일(로그)을 filename, 해당 파일을 대체하여 작은 파일로 저장하고자 하는 파일명을 prefix 부분에 입력합니다.

split [options] filename prefix

- l : linenumber (출력 파일당 줄 수)
- b : bytes (출력 파일당 바이트 크기)

-l(소문자 L) 옵션을 사용 할 경우 output 파일 각각에 원하는 행(줄) 수를 지정하여 저장할 수 있습니다. 기본값은 1,000행이며 -l 옵션을 이용하여 이를 변경할 수 있습니다.
-b 옵션을 이용해 각 파일 당 원하는 크기(바이트)로 output 파일을 저장할 수 있습니다.

split 명령어를 이용해 파일 분할 시 별도의 출력 파일 이름(prefix)을 지정하지 않는다면, 기본적으로 output 파일 이름은 초기 파일명 x와 함께 xaa에서 xzz까지 부여됩니다.

예를 들어 살펴보겠습니다. alert_test.log 파일에 3,000 줄의 텍스트가 입력된 파일을 다른 option 및 prefix 지정 없이 분할을 시도했다면?

split alert_test.log

각 1,000 줄의 텍스트가 입력된 3개의 xaa, xab, xac 파일이 생성됩니다.


split -l 500 alert_test.log TEST


각 500 줄을 가진 6개의 TESTaa, TESTab, TESTac, TESTad, TESTae, TESTaf 파일이 생성됩니다.



Examples

테스트로 진행할 로그 파일의 행은 402,705줄 입니다.


vi 편집기 행(Line Number) 표시 [:set nu], 숨기기 [:set nonu]


출력 파일명 입력 없이, -l 옵션으로 100,000 행 분할 시 xaa, xab, xac, xad, xae로 각 100,000 행의 파일 4개 및 2,705 행의 파일 1개가 저장되었습니다.


xaa 파일을 확인해보면 마지막 행의 숫자가 100,000인 것을 확인할 수 있습니다.


이번엔 출력 파일명 alert_test_ 입력, -b 옵션으로 1024k 단위로 분할해보겠습니다. 분할 후 저장된 파일을 확인해보면 alert_test_aa~alert_test_ar 파일이 각각 1024k로 분할된 것을 확인할 수 있습니다.


참고로 이렇게 분할된 파일을 병합하기 위해서는 cat 명령어를 이용하면 됩니다.

cat alert_test_aa alert_testab alert_testac > alert_test

지금까지 유닉스에서 대용량 로그 파일을 손쉽게 분할, 병합하는 방법을 살펴보았습니다. 도움이 되셨나요?

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함