2010/03/31 10:22
unix 환경에서 perl 을 이용해서 파일내의 문자열 형태의 날짜 형태를 변경할때에는 아래와 같이 사용하면 됩니다.
201003310900%PU.LMIV003C%상품.업무%신계약%심사%장기인심사_처리(단체형)%0%1%49.13%0.006%48.426%%0.697%0.076%0%0.616%
201003310900%TD.AMDP0171%판매.마케팅%영업지원%정보큰바다%우편데이터고객업데이트%0%1%31.904%%0.203%%31.7%31.7%0%0%
201003310900%PU.LMIV003R%상품.업무%신계약%심사%장기인심사_조회(단체형)%0%3%31.876%0.002%30.214%%1.659%0.04%0%1.606%
...
위와 같은 형태의 아스키 파일에서 앞부분의 timestamp 부분을 db2 가 제공하는 기본 timestamp 포맷인
YYYY-MM-DD-HH.MM.SS.UUUUUU 형태로 변경해야지 데이터를 통으로 넣기가 수월합니다.
2010-03-31-09.00.00.000000%PU.LMIV003C%상품.업무%신계약%심사%장기인심사_처리(단체형)%0%1%49.13%0.006%48.426%%0.697%0.076%0%0.616%
2010-03-31-09.00.00.000000%TD.AMDP0171%판매.마케팅%영업지원%정보큰바다%우편데이터고객업데이트%0%1%31.904%%0.203%%31.7%31.7%0%0%
2010-03-31-09.00.00.000000%PU.LMIV003R%상품.업무%신계약%심사%장기인심사_조회(단체형)%0%3%31.876%0.002%30.214%%1.659%0.04%0%1.606%
...
이런 형태랄까요?
보통은 이런 작업에는 sed 를 많이 사용하는 것 같습니다. (cut 을 이용해서도 구현이 가능하지만 cut 을 사용할 경우 파이프를 타고 데이터가 전달되면서 한글 부분에서 간간히 에러를 뱉는 현상이 발생하는 것 같습니다.)
여튼 제가 찾아본 제일 간단한 방법은 perl 을 사용하는 것입니다.
perl -pi.bak -e 's/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([*]*)/$1-$2-$3-$4.$5.00/g' <filename>
이런식이죠~
만들어진 결과 파일은
import from <filename> of del
modified by codepage=970 usedefaults coldel%
insert into <tabname>
로 간단하게 입력이 가능합니다. (import 옵션에서도 timestampformat 을 지정할 수 있는데 왠지 잘 안되더군요.;;)