1. 개요
Aho, Weinberger, Kernighan[1]스트림 기반 텍스트 처리를 위한 스크립트 언어.
발음은 /ɔːk/로, ɔ가 후설 원순 중저모음임을 감안하면 대략 '어크' 정도가 된다. 영국식으로 August 를 발음할 때 /ˈɔː.ɡəst/(어거스트)로 발음하는 것을 생각하면 쉽다. 국내에서는 흔히 '오크' 정도로 발음하는 경우가 많다. #
2. 용도
주로 정규표현식을 사용한 라인 단위의 처리를 하는 데에 매우 효과적이다.예를 들면 각 행의 모든 숫자를 더해 총합을 계산하는 등의 작업에 효과적이지만, 전체 행을 처음부터 끝까지 읽은 후 정렬하는 등의 작업(불가능한 것은 아니다)을 하기에는 상대적으로 불리하며, 무엇보다 sort명령어가 있다.
또한 전체 데이터가 한 줄로 되어있는 형태의 데이터를 다루기에도 상대적으로 불리하다.
3. 특징
PCRE를 지원하며, C언어와 문법이 비슷하다.4. 문법
기본적으로#!syntax javascript
패턴 {
액션
}
의 정의가 반복되는 형태를 취한다.액션은 일련의 구문(statement)로 이루어지며, 각 구문은 일반적인 프로그래밍 언어의 행과 비슷하다.
단, awk에서는 행 끝에
;
을 붙혀도 되고, 붙히지 않아도 된다.4.1. 패턴
패턴은 기본적으로 참 또는 거짓을 가릴 수 있는 표현식이다.즉,
1
등의 상수도 패턴이 될 수 있으며, 항상 참이거나 항상 거짓으로 판정된다.보통의 경우 패턴에 정규표현식을 사용한다.
/https?:\/\/\w+\.\w/ {
print $0
}
위의 코드는 URL이 포함된 모든 행을 출력한다.4.1.1. 특수 패턴
awk는 대표적으로 다음의 두 가지 특수 패턴을 가지고 있다.- BEGIN: 파일의 시작 부분에 매칭된다. 따라서 BEGIN 패턴 안의 액션은 항상 시작시마다 반드시 실행된다. 주로 초기화 구문, 구분자 변수 설정 등의 코드가 위치한다. C언어의 main함수와 같은 역할을 한다고 볼 수 있지만, C와는 다르게 유일한 진입점은 아니다.
- END: 파일의 끝(EOF)에 매칭된다. 따라서 이 안의 코드 또한 파일을 모두 읽어들인 시점에 반드시 실행된다. 주로 결과 계산, 결과 출력 등의 코드가 위치한다.
4.2. 변수 선언
#!syntax javascript
variable = 123
과 같이 <변수명> = <대입할 값>
형태로 사용한다.타입은 문자열, 숫자 등이 존재하며 타입 명시는 필요하지 않다.
4.3. 제어문
awk는 문법적으로 C언어의 후손이다. 따라서 많은 내용을 C언어/문법과 공유한다.4.3.1. 조건문
#!syntax javascript
if (<condition>) <statement>;
또는
#!syntax javascript
if (<condition>) {
<statement>;
<statement>;
}
위와 같이 사용한다.
4.3.2. 삼항 연산자
#!syntax javascript
res = cond ? val1 : val2
의 형식으로 사용한다.4.4. 배열
awk에서의 배열은 JavaScript와 같이 실제로는 해시(맵) 형태이다. 따라서 키로는 숫자와 문자열 모두 가질 수 있다.#!syntax javascript
arr[0] = "item1"
arr[1] = "item2"
arr["string"] = "string key"
5. 기타
- Baekjoon OJ에서 이 언어를 지원한다.
awk로 숏코하는 빌런들이 많다 카더라
6. 관련 문서
[1] 개발자들의 이름이다.