델리미터(Delimeter)로 컬럼이 분기된 텍스트 파일(보통은 아마도 로그파일)을 다룰 때 가장 손쉽게 쓸 수 있는 도구가 awk 입니다. 물론 cut 등도 있지만 탐색한 이후의 작업을 주로 담당하기 때문에 탐색시에는 역시 awk 가 대세입니다. (당연하겠습니다만 awk 도 정규표현식의 탐색을 지원하니 자세한 내용은 글 맨 아래의 포스팅 링크를 참고해 주세요.)
awk 에서 특정 컬럼의 값을 표현하는 방법은 여러가지가 있습니다. 그동안 많이 사용했던 패턴은 아래와 같은 방식이었는데요 이 방식에서도 or, and 조건을 사용하는 것은 문제가 없습니다. 조건을 동시에 만족하는 경우를 찾으려면 &&를, 어느 하나라도 만족하는 경우를 찾으려면 || 를 사용하면 됩니다.
// AND (&&)
awk '$2=="" && $19~/my/ {print $11, $24}'
// OR (||)
awk '$2=="" || $19~/my/ {print $11, $24}'
이렇게 표현하는 방법 외에 브레이스({}) 안쪽에 if 문을 넣어서 사용하는 방법도 있습니다. 어느 방법을 사용하던 원하는 결과를 얻을 수 있으면 되니 손에 더 감기는 방법을 사용하면 좋을 것 같습니다. NOT 조건을 사용하는 경우에도 보다 쉽고 명시적으로 읽을 수 있어서 이 방법을 개인적으로는 선호하는 편입니다.
// AND (&&)
awk '{ if ($5=="/test" && $3=="GET") print $0}'
// OR (&&)
awk '{ if ($5=="/test" || $5=="/beta") print $0}'
// NOT (!)
awk '{ if (!($5=="/test")) print $0}'
코드를 만들 필요가 있을때 왠만하면 Node.js 를 이용하는 편입니다. 아무래도 익숙하기도 하거니와 자유로운 자바스크립트의 DNA 가 살아 있기 때문에 "대략 이렇게 돌아갈까?" 하는 것들이 동작하기 때문입니다. 하지만 환경에 따라서 특정한 언어를 사용해야 하는 경우에는 그 환경에 맞출 수 밖에 없는 경우도 생깁니다.
근래에 회사에서 제공하는 함수형 플랫폼을 사용하려다보니 (AWS 의 람다와 무척 비슷합니다) Python 을 사용할 일이 조금 생기고 있습니다. 본격적으로 다뤄본 언어도 아니고 개발환경도 익숙하지 않아 시행착오가 많이 생기고 있습니다. 오늘 만난 문제는 Visual Studio Code 에서 Python 을 사용할 때 발생하는 Unresolved Import Error 에 대한 이야기 입니다.
vscode 에서 만난 생소한 너란 녀석!
첫번째 방법
python 환경에 익숙하지 않다 보니 사실 python 2.x 와 python 3.x 가 공존하는 것도 사실 좀 생소합니다. pip도 2.x 와 3.x 용을 따로 사용하고 있고 python 환경에서 코드를 구동할 때 어떤 버전의 환경에서 구동되는 것인지 헷갈릴 때가 많습니다. 어찌되었건 돌아가는 환경이 준비되면 필요한 코드를 만드는데 집중하는 식이긴 하지만 여러가지로 찜찜한게 현실입니다. 물론... 이 현실을 타개할 것이냐는 다른 이야기죠 ㅎㅎ
오늘 새로운 코드 작업이 필요하여 저장소를 만들고 기존에 만들었던 코드를 기반으로 보일러 플레이팅하여 코드 작업을 시작했습니다. 그런데 왠지 모르게 계속 import 구문에서 가져온 모듈에 물결표시가 생기면서 unreolved import warning 에러가 눈에 띄었습니다. 코드는 동작하긴 하는데 vscode 에서 자동완성 같은 기능들이 삐그덕 거리는 느낌이 들었습니다. 수소문해보니 해결 방법은 여러가지이지만 가장 간단했던 방법을 소개합니다.
1) Ctrl + Shift + P 혹은 Cmd + Shift + P 를 누릅니다.
2) 창에 Python Select Interpreter 를 입력하고 선택합니다
3) 사용중인 Python 버전에 맞는 경로를 선택해 줍니다
이렇게 하면 vscode 에서 거슬리는 unresolved import warning 을 없앨 수 있습니다. 이렇게 지정한 Python 경로는 vscode 의 개별 과제별 환경 파일인 .vscode 경로 하위의 settings.json 에 기록됩니다. 거꾸로 얘기하면 이 파일을 직접 수정해도 동일한 효과를 얻을 수 있다는 말입니다. 저라면 Cmd + Shift + P 를 이용하는 방법을 계속 쓸 것 같습니다 ㅎㅎ
두번째 방법
위와 같이 해결되었다면 다행이지만 그렇지 못한 경우도 가끔 생깁니다. 이 때는 Visual Studio Code 의 인텔리센스 관련한 기능 동작에 문제가 있는 것일수도 있습니다. VIsual Studio Code 에서 문제가 되는 프로젝트를 열어둔 상태에서 Shift - Command - P 를 누릅니다. (윈도우에서는 Shift - Ctrl - P 일까요? 윈도 쓴지가 오래되서... ㅜㅜ)
화면에 검색창이 나오면 Language Specific 이라고 치고 자동 완성되 목록에서 (아마도) 첫번째 항목인 "Configure Language Specific Settings..." 를 선택해 줍니다. 곧바로 사용중인 언어를 선택하는 창이 나옵니다. python 을 입력하여 python 으로 언어를 선택하겠습니다. 그러면 settings.json 파일이 로드되는 것을 확인할 수 있습니다.
이때 열리는 settings.json 파일은 프로젝트와 관련된 파일이 아니고 Visual Studio Code 의 언어별 기본 설정입니다. 이 파일의 내용들 중 인텔리센스와 관련된 항목을 발견할 수 있는데요, 이 항목을 과감히 삭제하고 저장해 줍니다. 제 경우에는 "python.jediEnabled" 항목을 통째로 날려주었습니다 :-)
이제 프로젝트를 열어둔 Visual Studio Code 창을 닫고 다시 프로젝트를 열어보겠습니다. (아마도) Unresolved Import Error 가 사라졌을겁니다. 후훗.