대용량 텍스트 파일을 수정하려고 vi로 열었더니 갑자기 까만화면으로 변하고 아무것도 동작하지 않는 프롬프트를 볼 수 있는데요 이런 경우에는 운이 좋아 vi가 열렸다고 해도 버벅거림이 심해서 편집이 불가능할 것입니다. 그럼 어떻게 수정할 수 없을까 찾아보니.. 윈도우에서는 대용량 텍스트 파일을 편집할 수 있는 툴들이 몇몇 있는데 윈도우에서 수정하고 다시 서버로 FTP전송하자니 시간이 너무 오래걸리고... 이런 난감한 경우 구글링을 해보았습니다.
나누었다가 합치기
확실하고 간단한 방법으로 split이라는 명령어를 통해서 대용량 텍스트파일을 라인 단위로 찢어 나누었다가 일부만 편집하여 다시 합치는 방법입니다. 저는 이렇게 해결했습니다. 제일 간단하고 확실합니다. 사용법은 아래와 같습니다.
나누기
split [options] filename prefix
options
- -l : linenumber (출력 파일당 줄 수 지정)
- -b : bytes (출력 파일당 바이트 크기)
$ split -b 100m dump.sql
$ split -b 100k dump.sql
먼저 -b 옵션을 통해서 위에 100m는 100MB 단위로 분할, 아래 100k는 100KB 단위로 분할하는 작업입니다. 사용 시 출력 파 이름을 지정하지 않은 경우 기본 파일이름은 xaa ~ xzz 까지 알아서 부여되구요. 위의 상황을 예로 들었을 때 만약 dump.sql이라는 파일의 크기가 300MB인 경우 split -b 100m dump.sql로 나오는 파일은 xaa xab xac 이렇게 3개의 파일이 생성됩니다. 옵션을 통해 파일명을 지정할 수 있는데 분할할 파일명 뒤에 prefix를 지정할 수 있어요.
$ split -b 100m dump.sql DUMP_M
위와 같이 해주면 DUMP_Maa, DUMP_Mab, DUMP_Mac 이런식으로 파일이름이 지정되요.
다음은 -l 옵션을 통해서 라인별로 분할하는 방법입니다.
$ split -l 1000 dump.sql
-b옵션과 마찬가지로 prefix를 지정하지 않은 경우 xaa ~ xzz로 파일이름이 기본적으로 지정되고 위의 명령어로는 1000줄 단위로 분할해줍니다. 만약 dump.sql이 3000줄이라면 xaa, xab, xac 이렇게 3개의 파일이 나올 것이에요.
이렇게 분할한 후에 수정을 원하는 라인을 찾아서 해당 부분을 수정한 후에 합치면되요. (수정할 라인을 찾는것도 일.. 저는 윈도우에서 대용량 텍스트 편집 가능한 툴로 텍스트파일을 열어서 라인만 찾았습니다. 편집툴로 수정한다음에 올리면 되지면 업로드 시간도 만만치 않아서 이렇게 작업했습니다. 더 좋은 방법이 있다면 댓글로 알려주세요!)
합치기
수정을 마쳤다면 분할한 파일을 다시 합쳐야겠죠! 합치는 방법은 평소에도 자주 사용하는 명령어로 할 수 있습니다. 바로 cat 명령어를 통해서 가능합니다. 예를 들어 xaa, xab, xac 이렇게 3개의 파일로 분할된 경우 합치는 명령어입니다.
$ cat xaa xab xac > merge.sql
합치는 방법도 쉽게 됩니다. 그저 cat 뒤에 순서대로 파일 이름을 나열한 후 리다이렉트 시켜주면 되는것이지요.