[linux] 리눅스 파일 분할 (split)

- 3 mins

리눅스 대용량 파일 분할하기

용량이 큰 데이터를 다루다보면 파일들을 적절한 용량으로 쪼개서 처리해야하는 경우가 있다.

예를들어 10GB짜리 csv파일을 DB에 밀어넣어야 하는 경우,

1GB짜리 파일 10개로 나누어서 분산처리하는것이 통째로 넣는것보다 성능상 이득인 경우가 있다.

우선 이전에 포스팅했던 fallocate 명령어로 10GB짜리 파일을 만들어보자.

[itholic@linux test]$ fallocate -l 10G testfile_10gb
[itholic@linux test]$ ls -lh
합계 11G
-rw-r--r--. 1 itholic itholic 10G 2018-11-22 01:27 testfile_10gb

파일이 생성되었다.

이제 1GB 단위로 쪼개보자.

split명령어를 사용하면 다음과 같이 간단하게 파일 분할이 가능하다.

[itholic@linux test]$ split -b 1G 
[itholic@linux test]$ ls -lh
합계 20G
-rw-r--r--. 1 itholic itholic  10G 11월 22 10:37 testfile_10gb
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xaa
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xab
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xac
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xad
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xae
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xaf
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xag
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xah
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xai
-rw-rw-r--. 1 itholic itholic 1.0G 11월 22 10:38 xaj

파일이 잘 분할되었다.

또한, 라인 단위로 파일을 나눌수도 있다.

다음과 같이 임의의 10000줄짜리 파일을 생성했다.

    1 let's split the file line by line
    2 let's split the file line by line
    3 let's split the file line by line
    4 let's split the file line by line
    5 let's split the file line by line
    6 let's split the file line by line
    7 let's split the file line by line

             ... 
             ...

 9994 let's split the file line by line
 9995 let's split the file line by line
 9996 let's split the file line by line
 9997 let's split the file line by line
 9998 let's split the file line by line
 9999 let's split the file line by line
10000 let's split the file line by line

파일의 길이는 다음과 같이 wc -l 명령을 활용해 쉽게 구할수도 있다.

[itholic@linux test]$ cat testfile_10000line | wc -l
10000

이제 이 파일을 100줄짜리 파일 100개로 나누어보자.

[itholic@linux test]$ split -l 100 testfile_10000line
[itholic@linux test]$ ls
testfile_10000line  xae  xaj  xao  xat  xay  xbd  xbi  xbn  xbs  xbx  xcc  xch  xcm  xcr  xcw  xdb  xdg  xdl  xdq  xdv
xaa                 xaf  xak  xap  xau  xaz  xbe  xbj  xbo  xbt  xby  xcd  xci  xcn  xcs  xcx  xdc  xdh  xdm  xdr
xab                 xag  xal  xaq  xav  xba  xbf  xbk  xbp  xbu  xbz  xce  xcj  xco  xct  xcy  xdd  xdi  xdn  xds
xac                 xah  xam  xar  xaw  xbb  xbg  xbl  xbq  xbv  xca  xcf  xck  xcp  xcu  xcz  xde  xdj  xdo  xdt
xad                 xai  xan  xas  xax  xbc  xbh  xbm  xbr  xbw  xcb  xcg  xcl  xcq  xcv  xda  xdf  xdk  xdp  xdu

100개의 파일로 나누어졌다.

특정 디렉토리 내에 파일 갯수를 확인하려면 다음과 같이 명령하면 된다.

[itholic@linux test]$ find . -type f | wc -l
101

현재 디렉토리에서 type이 파일타입의 데이터를 찾아서(디렉토리는 제외) 갯수를 확인하는 예제이다.

총 101개, 즉, 원본을 제외한 100개의 분할본이 잘 생성된것을 확인할 수 있다.

분할본의 라인이 100줄씩 잘 나누어졌는지 확인해보자.

[itholic@linux test]$ cat xaa | wc -l
100
[itholic@linux test]$ cat xab | wc -l
100
[itholic@linux test]$ cat xac | wc -l
100

잘 나누어졌다.




코딩장이

코딩장이

-장이: [접사] ‘그것과 관련된 기술을 가진 사람’의 뜻을 더하는 접미사.

rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora