## 개요 `awk`명령어는 파일 / stdin 으로부터 전달받은 레코드를 파싱하여, 데이터화 해서 사용하는 도구이다. 역시 가볍고, 강력한 도구로 리눅스 시스템에서 많이 사용하며, 모두가 한번쯤은 사용해 봤을거라 믿는 그런 프로그램이다. 빠르게 awk 사용법에 대해서 숙지해 보자. ## Explanation awk는 데이터를 파싱 / 데이터화 한다고 앞서 이야기했는데, 이는 전달받은 값을 줄 단위로 구분하여 레코드로 지정하고, 레코드 내를 필드로 파싱하게 된다. 필드의 파싱 기준은 공백이 될 수도 있고, 특정 문자가 될수도 있다. (지정이 가능하다) 무튼 이렇게 파싱된 데이터를 빠르게 데이터베이스에 질의하듯 사용할 수 있도록 해주는 프로그램으로 이해하면 되고, [[grep]]보다 좀더 복잡한 질의를 할수 있다는 점에서 grep과 같이 사용되기도 하는 도구이다. ## Usage ``` awk [OPTION] ‘pattern { action }‘ [ARGUMENT] ``` ### Option 옵션은 우리가 프로그램을 사용할 때 보는 그 옵션이다. 다양한 옵션이 존재한다. #### 주요 명령어들 - -F : 구분자 지정 `—-field-separator` - -f : 스크립트 파일 지정 `—-source-file` - -v : 변수 지정 `—assign var=val` - -W : #### 기타 명령어들 - -b - -C - -d - -D - -e - -E - -g - -h - -i - -I - -l - -L - -M - -n - -N - -O - -p - -P - ### awk program 앞서 좀더 복잡한 질의를 할수 있다는 말을 했는데, 코드 단위의 스크립트를 통해 복잡한 질의가 가능하다. 기본적으로 지원되는 형식은 C와 유사한 형태로 지원되며, 다음과 같은 명령어들이 사용이 가능하다. ``` BEGIN delete END function in printf break do exit getline next return continue else for if print while ``` ### awk program functions ``` Arithmetic Functions : atan2(y,x), cos(x), sin(x), exp(x), log(x), sqrt(x), int(x), rand(), srand([expr]) String Functions : gsub(ere, repl[, in]), index(s, t), length[([s])], match(s, ere), split(s, a[, fs ]), sprintf(fmt, expr, expr, ...), sub(ere, repl[, in ]), substr(s, m[, n ]), tolower(s), toupper(s) Input/Output and General Functions : close(expression), getline getline var system(expression) ``` ## 결론 간단한듯 하면서도 복잡해 보이는 `awk`였다. 솔직히 awk language에 익숙해져 있는 사람들이 awk를 이용하여 로그 분석하는 걸 보면 차원이 다르다는걸 느낄 수 있다. [[로그 포렌식]]에서 꽤나 딥한 수준의 사용법을 다뤄볼 예정이니, 프로그램의 대략적인 이해를 가져가면 될 것 같다. (복잡한 예시는 직접 구글링해보는 편이 더 좋다)