728x90

node.js 를 사용하면서 가장 애를 먹는 것중 하나가 설치한 모듈을 찾지 못한다는 메세지를 만날때 입니다. 환경에 따라 모듈의 설치 경로가 달라질 수 있고, node.js 가 설치된 모듈을 찾아가는 순서에 영향을 받기 때문입니다. 간단한 몇 가지 명령을 통해 node.js 가 어떤 순서로 모듈을 탐색하는지 확인하고 글로벌 모듈로 설치된 경우 이를 명시적으로 node.js 가 이용할 수 있도록 알려줌으로써 어느정도 문제를 해결할 수 있습니다.


아래와 같이 npm 에서 -g 옵션을 이용하여 모듈을 설치하면 글로벌 모듈로 설치가 됩니다. 프로젝트에 관계 없이 설치된 모듈을 이용할 수 있어야 하는 것이지요. 일부 환경에서는 sudo 명령을 이용하여 관리자 권한으로 설치를 해야 할 수도 있습니다.


$ npm install -g [#모듈이름#]


또는


$ sudo npm install -g [#모듈이름#]


이렇게 -g 옵션을 이용하여 글로벌 모듈로 설치하는 경우, 그 경로는 어떻게 될까요? 아래와 같은 명령을 이용하여 글로벌 모듈로 설치하는 경우의 Path 를 확인할 수 있습니다.


$ npm root -g

/usr/local/lib/node_modules


간혹 글로벌 옵션을 이용하여 설치한 모듈을 찾을 수 없다고 나오는 문제를 겪고 있다면, 위의 명령으로 확인한 경로를 NODE_PATH 라는 환경 변수에 저장하여 node.js 가 글로벌 모듈을 찾을 때 참조할 수 있도록 명시적인 지정을 할 수 있습니다. 반복적으로 사용해야 하는 값이기 때문에 홈 디렉토리의 .bash_profile 파일에 포함하여 터미널 실행시 셋업되도록 하면 되겠습니다. 윈도 환경에서는 시스템 환경 변수에 넣어주면 됩니다.


~/.bash_profile 에 아래와 같이 환경 변수 추가


export NODE_PATH="/usr/local/lib/node_modules"


글로벌 모듈 이외에 현재 프로젝트에서 모듈을 찾아가는 탐색 순서를 확인하려면 아래와 같이 간단한 자바스크립트 구문을 node.js 를 이용하여 실행해보면 됩니다. 아래의 경로로 모듈을 찾아본 뒤, NODE_PATH 에 지정한 경로까지 탐색하여 현재 환경에서 모듈을 찾고 이용하게 됩니다. 


$ node -e "console.log(global.module.paths)"

[ '/Users/snoh/node_modules',

  '/Users/node_modules',

  '/node_modules' ]


- NoPD -



728x90
728x90

터미널에서 로그파일을 핸들링하면서 자주쓰이는 명령들이 있습니다. 전체 파일을 출력하기 위해서 cat 명령을 사용하고 특정한 컬럼의 값만 출력하기 위해서 파이프로 연결된 awk 명령을 쓸 때가 많습니다. 그런데, 컬럼이 아주 많은 경우에 특정한 컬럼만 제외하고 나머지를 출력할 수 있는 방법이 있을까요? 컬럼이 적은 경우에는 필요한 필드를 나열하는 것도 괜찮지만, 수십개, 수백개의 컬럼이 있다면 그다지 좋은 방법이 될 수가 없습니다.


예를 들어 temp.txt 파일에 아래와 같이 스페이스로 구분된 10개의 컬럼이 있다고 해보겠습니다. 이 파일의 정보들 중에서 특정한 컬럼의 값만 추출하고 싶다면 awk 명령을 이용해서 print 예약어를 이용할 수 있을 겁니다. 


$ cat temp.txt

C1 C2 C3 C4 C5 C6 C7 C8 C9 C10

$ cat temp.txt | awk '{print $3, $5}'

C3 C5


이 데이터 파일에서 거꾸로 3번 컬럼과 5번 컬럼의 값을 제외한 나머지 컬럼의 값을 추출하려면 어떻게 해야 할까요? print 구문의 파라메터로 $3 과 $5 만 빼고 나열해도 되겠지만, 아래와 같이 명령을 입력하면 훨씬 빠르고 쉽게 특정한 컬럼만을 제외하고 데이터를 정제할 수 있게 됩니다.


$ cat temp.txt | awk '{$3=$5=""; print $0}'

C1 C2  C4  C6 C7 C8 C9 C10


동일한 결과물을 얻어내는 방법이 여러가지 있다면 그중에서 가장 간편한 방법을 택하는 것이 누가 뭐라해도 진리일 겁니다. 작업시간을 절약하고 더 집중해야 하는 것들에 몰입하는 하루 되시길 바랍니다!



728x90
728x90

다량의 데이터를 추출하면 필연적으로 정렬에 대한 필요성이 생깁니다. 정렬이 필요한 순간은 정말 다양하겠지만 대표적인 경우들을 들어보자면, 1) 특정한 조건에 만족하는 로그 라인의 갯수를 오름/내림 차순으로 정렬, 2) 시계열 순으로 로그가 추출되지 않은 경우, 시간 컬럼을 기준으로 로그 라인을 정렬과 같은 것이 있습니다. 1의 경우는 카운트를 위한 명령을 파이프로 연결후 쉽게 정렬할 수 있습니다.


$ cat domain.log | awk '{print $3}' | sort


위의 커맨드는 domain.log 파일을 핸들링하면서 세번째 열을 출력하고 이를 정렬하는 명령어 입니다. 여기에 파이프를 추가하여 유니크(Unique)한 이름을 발라내고, 다시 카운트된 갯수를 기준으로 정렬하려면 아래와 같은 명령을 생각할 수 있습니다.


$ cat domain.log | awk '{print $3}' | sort | uniq -c | sort -rn


그런데 특정한 컬럼을 기준으로 정렬하되 전체 데이터를 유지하려면 awk 명령으로는 왠지 좀 불편한 느낌입니다. 이때는 awk 를 이용하지 말고 sort 명령만으로 정렬하는 것이 더 유리합니다. 


$ cat domain.log | sort -k 3


이렇게 하면, 세번째 컬럼 (이때는 공백으로 각 컬럼이 나뉘어진 데이터라 가정했습니다) 을 기준으로 정렬후 데이터를 출력해 주게 됩니다. 자주 쓰는 명령인데 쓸때마다 자꾸 구글링하게 되어 블로그에 기록해 둡니다!



728x90
728x90

여러 문서들에 따르면 Python 2 의 경우 2.7.9 이상의 버전, Python 3 의 경우 3.4 버전 이상이 설치된 경우 파이썬 패키지 매니저인 pip 가 이미 설치되어 있을 거라고 합니다. 하지만 늘 예외가 있는 법이고, 그 예외는 본인에게 해당되는 경우가 많죠. 설치된 파이썬의 버전 조건이 맞지만 pip 가 설치되어 있지 않다면 아래의 순서대로 pip 를 쉽게 설치할 수 있습니다. 맥을 쓰고 있다보니 brew 로 pip 설치를 하려고 했으나, 파이썬이 중복되어 설치될 수 있다는 경고때문에 따로 설치를 진행했습니다.


먼저, curl 을 이용해서 pip 를 설치하기 위한 파이썬 코드를 다운로드 받습니다. 뭐, 브라우저를 이용해서 소스코드를 로딩하고 파일로 따로 저장하겠다 하시면... 그리 하셔도 말리진 않겠습니다.


$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py


소스코드가 다운로드 되었다면 실행을 해보겠습니다. 사용중인 환경에 따라 sudo 로 권한 상승을 할 필요가 있다는 점 참고하시기 바랍니다. 


$ sudo python get-pip.py

Collecting pip

  Downloading pip-8.1.2-py2.py3-none-any.whl (1.2MB)

    100% |████████████████████████████████| 1.2MB 927kB/s

Collecting wheel

  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)

    100% |████████████████████████████████| 71kB 4.5MB/s

Installing collected packages: pip, wheel

Successfully installed pip-8.1.2 wheel-0.29.0


이제 pip 를 실행해보겠습니다. 잘 되는군요.


$ pip


Usage:

  pip <command> [options]


Commands:

  install                     Install packages.

  download                    Download packages.

  uninstall                   Uninstall packages.

  freeze                      Output installed packages in requirements format.

  list                        List installed packages.

  show                        Show information about installed packages.

  search                      Search PyPI for packages.

  wheel                       Build wheels from your requirements.

  hash                        Compute hashes of package archives.

  completion                  A helper command used for command completion

  help                        Show help for commands.



728x90

+ Recent posts