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