최근 수정 시각 : 2024-01-24 22:19:28

awk


1. 개요2. 용도3. 특징4. 문법
4.1. 패턴
4.1.1. 특수 패턴
4.2. 변수 선언4.3. 제어문
4.3.1. 조건문4.3.2. 삼항 연산자
4.4. 배열
5. 기타6. 관련 문서

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] 개발자들의 이름이다.