'개발자세상/Shell 관련'에 해당되는 글 13건

  1. 2009.01.23 VI 문자열 대치
  2. 2008.12.08 특정 이름의 file이 같은 파일 들인지 비교
  3. 2008.11.21 "join" command
누가 정리해 놓은건지는 몰라도 정말 잘 정리 되어 있는것 같다.



Vi: Search and Replace

Change to normal mode with <ESC>.

Search (Wraped around at end of file):

  Search STRING forward :   / STRING.
  Search STRING backward:   ? STRING.

  Repeat search:   n
  Repeat search in opposite direction:  N  (SHIFT-n)

Replace: Same as with sed, Replace OLD with NEW:
 
 First occurrence on current line:      :s/OLD/NEW
  
 Globally (all) on current line:        :s/OLD/NEW/g 

 Between two lines #,#:                 :#,#s/OLD/NEW/g
  
 Every occurrence in file:              :%s/OLD/NEW/g 
Posted by headiron
,
RMF Patch Tool을 만들면서 정팀장님이 알려준 command 이다.


shell>> (find <directory name> -name "<file name>" | xargs -i md5sum {}) | cut -d" " -f1 | sort | uniq -c | sort -rn      
   1489 ad4b435cf7bb1510450ac462e5989bd4
    337 d8c24915ea62f9fab3f9b6bc19448bde
     22 d93bc56dca97d6af9d3a764cda23f4e5

이런식으로 결과가 나온다.

즉 <directory name> 폴더에 있는 <file name>의 파일들을 찾아 checksum 값에 따라서 분류 한 후 count를 하면
"ad4b435cf7bb1510450ac462e5989bd4" 값을 checksum 값으로 가지는 파일이 1489개
"d8c24915ea62f9fab3f9b6bc19448bde" 값을 가지는 파일이 337 개
"d93bc56dca97d6af9d3a764cda23f4e5" 값을 가지는 파일이 22개
이런식으로 출력되는 것이다.

위의 결과를 기준으로 특정 checksum 값을 가지는 파일 list를 구하려고 할 경우
shell>> (find <directory name> -name "<file name>" | xargs -i md5sum {}) | grep  <checksum>

<directory name>폴더내에 <file name> 이름을 가지는 파일 들 중 <checksum>값을 checksum 값으로 가지는 file들 list가 출력된다.

흠... 이래저래 요즘 shell 많이 배우게 된다.

참고로 위의 명령 중 xargs 명령은 javascript의 eval 명령문처럼 특정 명령을 만들어 실행 시켜 주는 그런 명령문이다.

'개발자세상 > Shell 관련' 카테고리의 다른 글

Shell 에서 FTP uploading check  (0) 2013.03.21
공용키 기반 인증  (0) 2010.01.26
서로 다른 디렉토리의 전체 파일 diff 실행하는 script  (0) 2009.01.30
VI 문자열 대치  (0) 2009.01.23
"join" command  (0) 2008.11.21
Posted by headiron
,
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
,