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하는 것과 동일한 효과를 볼 수 있다.
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하는 것과 동일한 효과를 볼 수 있다.
'개발자세상 > Shell 관련' 카테고리의 다른 글
Shell 에서 FTP uploading check (0) | 2013.03.21 |
---|---|
공용키 기반 인증 (0) | 2010.01.26 |
서로 다른 디렉토리의 전체 파일 diff 실행하는 script (0) | 2009.01.30 |
VI 문자열 대치 (0) | 2009.01.23 |
특정 이름의 file이 같은 파일 들인지 비교 (0) | 2008.12.08 |