제가 메일 서비스를 담당하는 관계로, 메일 서버의 로그나 관련 데이터를데이터를 뒤질 일이 적지 않습니다. 데이터량이 적으면야 대충 대충 어떻게든 하겠지만, 백만라인을백만라인을 넘어간다던지, 데이터 파일의 크기가 50메가가 넘는다던지 하게 되면 그 안에 필요한필요한 데이터만 뽑기가 완전 뭣같죠(...) Acroedit로 파일 나누고, 엑셀로 임포팅하면 한 3만년3만년 걸리는 경우가 좀 있고, 대부분의 경우 그냥 시스템이 뻗어버립니다. -_-;
개발자는 아니지만 틈틈히 개발자분들 귀찮게 하다가 nix 환경에서 grep 커맨드가 있다는있다는 사실을 알게 되었습니다. 그 큰 파일에서 필요한 텍스트가 있는 부분만 찾아내주는찾아내주는 아주 유용한 커맨드더군요. 혹여나 짧은 상식에 윈도에도 그런게 있나 싶어 CommandCommand Console을 열고 grep을 치니 아래와 같이 나오더군요.
이런.. &(%^$%!@^%$^!%$@#!!!!! 나는 어쩌라고!!!! 제가 회사에서
MS Office 2007 Beta 2 버전을 쓰고 있는데, 제아무리 엑셀 2003까지의 라인제한이었던 65,536 라인의 몇배를 지원하는 Excel 2007 이라 하더라도 몇십만줄을 한번에 부르기도 불가능한 상황이고, 설혹 나눠서 부른다고 해도 컴퓨터가 중간에 뻗어버리는데 어찌하오리까. -_-;
그러다가 문득 아~주 옛날에 "파일검색"용인 줄 알았던 커맨드, find가 떠올랐습니다.
컴퓨터를컴퓨터를 잘 모르던 시절이니 안된다고 투덜거리기만 했지요. 그래서 find 명령어를 쳐보니,
아니.아니. 살아있는겁니다.
find /? 를 입력해서 스위치 및
매개매개 변수를 봤습니다.
nix 계열의 grep 커맨드와 비교했을
때때 상당히 간단하고, 제한된 범위 내의 기능만을 제공하고 있습니다만, 적어도 제가
필요한필요한 "특정 문자열을 가진 라인의 추출" 기능을 사용할 수 있으니 꽤
만족스럽네요.만족스럽네요.
find 문의 기본 구문은 [find "문자열" 파일이름] 입니다. 별다른
스위치를스위치를 달지 않고 저렇게만 입력하면 해당 파일에서 특정 문자열을 가진 라인을
화면으로화면으로 표시해줍니다. 이걸 파일로 표시하기 위해서는 "> 파일명"을 덧붙여주면 되는군요.
예를예를 들어, at.txt 파일에서 widelake 라는 문자열을 가진 파일을 pentium.txt로 저장하려면
아래와아래와 같이 쓰면 됩니다.
C:\>find "widelake" at.txt > pentium.txt
스위치는 다음 것들이 있군요.
/V 지정한 문자열이 없는 줄을 표시합니다.
/C
지정한 문자열이 있는 줄 수만을 표시합니다.
/N
지정한 문자열이 있는 각 줄 앞에 줄 번호를 붙입니다.
/I/I 대/소문자를 구별하지 않고 찾습니다.
/OFF[LINE] 오프라인 속성
세트세트 파일을 건너뛰지 않습니다.
/V를 붙이게 되면 (c:\find /v "widelake"
at.txtat.txt > pentium.txt) widelake 문자열을 포함하지 않는 라인만 pentium.txt 파일로 저장하게
됩니다.됩니다. /V를 붙이면 안 붙인 것과 정 반대의 결과값이 나오는 거죠.
/C는 문자열을 포함하는 라인의 갯수만 출력해줍니다. 열 전체를 저장해주는게 아니구요.
/N은 저장할 때 해당 라인의 라인번호를 같이 붙여줍니다. /C
스위치하고스위치하고 같이 쓸 수는 있는데 어차피 /C는 라인갯수만 세어주기 때문에 의미는
없습니다.없습니다. 그리고 /I는 대소문자 구별을 해제하는 것인데, 영문 문자열을 찾을때만 해당되는
사항이군요.사항이군요. /OFFLINE 은 뭔지 모르겠습니다. -_-;
실제 써보도록 하겠습니다.
아래아래 내용을 가진 at.txt 파일이 있다고 가정하겠습니다.
widelake
widelake dreamwiz
gmail
widela skku
iriver
①① find "widelake" at.txt
---------- AT.TXT
widelake
widelake
dreamwizdreamwiz
② find /v "widelake" at.txt
----------
AT.TXTAT.TXT
gmail
widela skku
iriver
③ find /c "widelake" at.txtat.txt
---------- AT.TXT: 2
④ find /v /c/c "widelake" at.txt
---------- AT.TXT: 3
⑤ findfind /n "widelake" at.txt
---------- AT.TXT
[1]widelake
[2]widelake dreamwiz
⑥ find /v /n "widelake" at.txt
----------
AT.TXTAT.TXT
[3]gmail
[4]widela skku
[5]iriver
뭐 이정도 결과값들을 뽑아줍니다.
상당히상당히 괜찮은 커맨드이니 윈도만 사용하시면서 grep을 그리워(?)하는 분들은 부족하나마 써보시는 것도
괜찮을괜찮을 듯 합니다. :D grep 하나 때문에 리눅스 라이브CD까지 쓴 저로써는
-_-;-_-; 흑흑.