2025년 8월 24일 일요일

VIM vs AWK - 2nd

강의 이해를 위해 요구되는 사전 지식들.


필수 요건으로 못박고 싶지만 그랬다간 망할까봐 권장으로 타협. 출강 기관 측은 아예 빼자고 하는데 그러고 싶진 않다. 내 강의 정체성이기 때문.

세상 모든 데이터는 문자열

SQL이든 (엘라스틱/스플렁크 등의) NoSQL이든, 세상 모든 DB는 문자열 데이터를 깎고 다듬어 테이블 구조로 바꾸는 전처리 작업을 필수로 거친다. 그래야 데이터 분석을 시작할 수 있으니까.
데이터는 테이블이다

데이터를 분석하려면 엘라스틱이나 스플렁크가 아닌 데이터를 잘 알아야 한다. (의미 파악은 기본이고) 전체적인 구조는 어떤지, 내 목적에 맞는 범위는 어딘지, 그 범위의 데이터를 어떻게 가공해야 원하는 분석이 가능한지에 대한 감을 잡을 수 있어야 한다. 이런 감각을 일깨워주는 가장 확실한 방법은 결국 데이터를 직접 만져보는 것. 

이런 경험을 가장 쉽게 할 수 있는 환경이 바로 리눅스. 목적에 맞는 셋팅을 시도하는 과정에서 기본 편집기인 VIM을 사용할 수밖에 없으니까. 

문자열 데이터를 다루는 감을 익히는 데 문자열 편집기보다 더 좋은 툴이 있을까? 

꼭 VIM 때문에만 리눅스 경험을 주문하는 것도 아니다. 사실 리눅스는 운영체제 자체가 문자열 데이터 처리를 위한 종합선물세트라고 해도 과언이 아니기 때문.

웹로그 메소드 발생 내역
root@MHKANG:~# awk '{print $6}' 2014.log |
> awk -'"' '{print $2}' |
> sort -u
-
CONNECT
GET
HEAD
POST
quit
cs

메소드 고유개수1
root@MHKANG:~# awk '{print $6}' 2014.log |
> awk -'"' '{print $2}' |
> sort -|
> wc -l
6
cs

메소드 고유개수2
root@MHKANG:~# awk '{print $6}' 2014.log |
> awk -'"' '{print $2}' |
> awk 'arr[$1]=="" {arr[$1]="x"} END {print length(arr)}'
6
cs

변수 고유개수
root@MHKANG:~# awk '{if ($7 ~ /\?/) print $7}' 2014.log |
> awk -'?' '{print $2}' |
> sort -|
> wc -l
63349
cs

변수 고유개수 차원 축소1
root@MHKANG:~# awk '{if ($7 ~ /\?/) print $7}' 2014.log |  
> awk -'?' '{print $2}' | 
> sed 's/[0-9]//g' | 
> sort -| 
> wc -l
330
cs

변수 고유개수 차원 축소2
root@MHKANG:~# awk '{if ($7 ~ /\?/) print $7}' 2014.log | 
> awk -'?' '{print $2}' | 
> awk '{gsub("[0-9]", "")}1' | 
> sort -| 
> wc -l
330
cs

이런 경험이 쌓이고 모여 데이터를 다루는 감각을 키워준다. 그런데 이 모든 작업이 VIM이라는 하나의 툴에서 다 가능하다. 정규표현식 지원 범위도 훨씬 넓다.


관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스