RMF Bug Escalation Toool 개발 하면서 7.X 만 지원하도록 개발을 했는데

6.X 도 지원해 달라고 연락이 왔다.

6.X의 경우 API에서 Creative Read시 creative/component file name을 return하지 못하여 지원하지 못했는데

정팀장님이 DB에서 결과 파일을 가져와서 이를 find로 찾은 결과 파일과 "join" command로 처리하자는 얘기를 해주었다.

나는 그냥 자바에서 어떻게 처리 좀 해 볼라 했는데 ( 솔직히 아직도 shell 보다는 java가 훨 익숙하다는 .. )

정팀장님은 역시 자바 보다는 먼저 shell을 생각 한다.

사용해 본 결과 일단 실행 속도는 상당히 괜찮아 보였다.

쓰는 방법도 그다지 어렵지 않고

다만 join을 하기 위한 두개의 파일이 반드시 정렬이 되어 있어야 한다.

특히 정렬이 ascii code값에 의한 정렬이 아닌 LC_COLLASE 설정값에 의해 정렬 되어 있어야 한다고 한다.

( 테스트 중에 ascii code 값으로는 /QA/ 가 /QADE/ 보다 앞서는데 ( "/"가 "D"보다 ascii code 보다 앞선다.) join이 걸리지 않아 해당 파일을 sort 한 후(sort command 이용 ) 다시 실행해 보니 join이 실행되었다.)

그리고 이건 shell 실행시 항상 유의해야 할 일이지만 비교 파일이 dos 포멧일 경우 문제가 발생할 수 있다.
( 비교 필드가 그 줄의 마지막 필드라서 그 문제가 특히 발생한것 같다.

  이 issue는 vi command 모드에서 :set ff=unix 를 실행하여 해당 파일을 unix 모드로

  수정 한 후 사용하면 된다. )

이번에 사용한 형태는

join -1 5 -2 1 -o 1.1,1.2,1.3,1.4 -t ^ a.txt b.txt > result

input과 output 파일은 "^"를 구분자로 필드를 구분하고 ( "-t ^" option 부분 : default는 white space 이다. )

첫번째 파일의 5번째 필드와 두번째 파일의 1번째 필드에 대해서 join을 실행하며

( "-1 5 -2 1" option 부분 )

첫번째 파일의 1, 2, 3, 4  번째 필드를 출력하고

( -o 1.1,2.1,1.3,1.4 option 부분 )

결과는 result 파일에 저장하는 형태이다.

테스트 결과 정렬만 되어 있으면 DB에서 join하는 것과 동일한 효과를 볼 수 있다.
Posted by headiron
,