본문 바로가기

Engineering/Etc

대용량 텍스트 파일 내용 변경하기

728x90

텍스트 파일 내용중에 일부를 다른 문자열로 치환하기 위해 sed 로 실행해보았다.

텍스트 파일은 12 GB 정도, 서버 : CPU Intel Xeon 2.6 GHz, RAM 4GB

# sed 's/AAA/BBB/g' text > conv_text

실행시간 : 대략 20분에서 30분에서 작업이 종료. 

-> sed 자체에서 변경하는 부분이 문제일 수도 있지만, redirect 로 다른 파일로 저장하는 것도 실행 시간에 문제가 되었을 것이다.


perl 을 사용해서 동일한 작업을 수행했다.

# time perl -pe 's/AAA/BBB/g' text

real    6m51.624s

user    1m3.129s

sys     0m42.110s

-> 대략 6,7분 사이에 완료되었다. 백업파일 옵션을 안줘서 그런가해서 다시한번 테스트 해보았다.


# time perl -ibak -pe 's/AAA/BBB/g' text

real    6m45.249s

user    1m4.498s

sys     0m42.332s

-> 시간이 더 적게 나온거는 오차가 있겠지만, "text.bak" 원본파일도 같이 생성되어도 작업이 6,7 분에 완료되었다.


perl 이 대용량 파일처리에 우수하다는 얘기는 들어보았지만 실제 사용하기는 처음인데, 이런 차이가 있을 줄은 몰랐다. perl 을 사용해서 파일 처리 테스트를 많이 적용해 보아야 겠다.


참고 :

http://wiki.kldp.org/wiki.php/PerlCommandLineCookBook