g .     if !  .     ds lq ``
GAWK(1)

명칭
gawk - 패턴 검색·처리 언어

서식
awk [ POSIX or GNU style options ] -f program-file [ -- ] file . . .
gawk [ POSIX or GNU style options ] [ -- ] program-text file . . .

해설
gawk (은)는 GNU 프로젝트가 실장한 프로그램 언어 AWK 의 처리계입니다. 본처리계는 POSIX 1003.2 명령어와 유틸리티 규약에 정해졌다 언어의 정의에 적합하고 있습니다. 본버젼은 또, Aho, Kernighan, Weinberger 의 저서 The AWK Programming Language 의 기술에 의거하고 있어 System V Release 4 UNIX 의 awk 의 부가 기능도 포함하고 있습니다. gawk (은)는 또, Bell Labs 의 신기능 및 GNU 독자적인 확장도 제공합니다.

명령행은, gawk 에의 옵션, (만약 -f 또는 --file 옵션에 의해 지정되어 있지 않으면)AWK 의 프로그램 텍스트, 그리고 나머지의 인수열로부터 됩니다. 이 나머지의 인수열은, 정의가 끝난 상태 AWK 변수 ARGC, ARGV (을)를 이용하는 것으로 참조할 수 있습니다.

옵션 포맷

gawk 에의 옵션은, 전통적인 POSIX 형식의 1 캐릭터 옵션과GNU 형식의 롱 옵션이 있습니다. POSIX 형식의 옵션은 단일의 “-'' 로 시작되어, 한편 GNU 형식의 것 (은)는 “--'' 로 시작됩니다. 롱 옵션은 GNU 의 독자 사양과 POSIX 의 필수 사양의 양쪽 모두에 대해 준비되어 있습니다.

POSIX 표준에 따라, gawk 독자 사양의 옵션은 -W 옵션에의 인수로 줍니다. 복수의 -W 옵션을 지정할 수도 있습니다. 후술의 같게, 각 -W 옵션에는, 거기에 대응하는 롱 옵션 하지만 존재합니다. 롱 옵션에의 인수는, 공백을 들어갈 수 있지 않고 = 그리고 이어 지정하는지, 그 다음의 명령행 인수로서 건네줄 수가 있습니다. 롱 옵션은, 단축형이 일의인 한, 단축할 수가 있습니다.

옵션
gawk (은)는 이하의 옵션을 받아들입니다.

-F fs
--field-separator fs
    입력 필드 구분자 (변수 FS 의 값)을 fs (으)로 합니다.

-v var=val
--assign var=val
    프로그램을 실행하기 전에, 변수 var 에 값 val (을)를 설정합니다. 이와 같이 해 설정 한 변수는, AWK 프로그램의 BEGIN 블록내에서도 참조할 수 있습니다.

-f program-file
--file program-file
    awk 에의 제 1 인수를 이용하는 대신에,AWK 프로그램을 파일 program-file (으)로부터 읽어들입니다. -f (또는 --file ) 옵션은 여러 차례사 용 할 수가 있습니다.

-mf NNN
-mr NNN
    다양한 메모리의 제한치를 NNN (으)로 설정합니다. 플래그 f (은)는 최대 필드수, 플래그 r (은)는 최대 레코드 사이즈를 설정합니다. 이 2 개의 플래그와 -m 옵션은, Bell Labs 버젼의 UNIX awk 에 유래하고 있습니다. 그러나, gawk 에는 이러한 제한은 없기 때문에, gawk 그럼 본옵션은 무시됩니다.

-W traditional
-W compat
--traditional
--compat
    호환 모드로 동작합니다. 호환 모드에서는, gawk (은)는 UNIX awk (와)과 등가인 동작을 실시해,GNU 독자 확장은 해석할 수 없습니다. 이 옵션의 다른 형식보다, --traditional (을)를 사용하는 것이 선호됩니다. 자세하게는 후술의 GNU 확장 (을)를 참조해 주세요.

-W copyleft
-W copyright
--copyleft
--copyright
    GNU 의 저작권 표시의 짧은 버젼을 표준 출력에 써내, 성공 상태로 종료합니다.

-W help
-W usage
--help
--usage
    약간 짧은 듯한 옵션 일람을 표준 출력에 써냅니다. ( GNU 코딩 규약 에 따라, 본옵션을 지정하면(자) awk (은)는 즉시 종료해, 성공을 의미하는 종료 스테이터스를 돌려줍니다. )

-W lint

--lint
    다른 AWK 에서의 처리가 의심스러운, 혹은 다른 AWK 와의 호환성이 없는 구조가 어느 경우에 경고를 실시합니다.
-W lint-old
--lint-old
    오리지날의 Unix awk 에 이식할 수 없는 구조에 관해서 경고를 실시합니다.

-W posix
--posix
    호환 모드를 온으로 해, 더욱 이하의 제약이 부과됩니다.

    •   \x escape sequence를 해석하지 않습니다.

    •   FS 하지만 단일의 공백으로 설정되었을 경우, 공백과 탭만이 필드를 단락지어, 개행은 필드를 단락짓지 않습니다.

    •   키워드 function 에 대응하는 별명 func (을)를 해석하지 않습니다.

    •   연산자 ^ (이)나 ^= 의 것인지 비교적 ** (이)나 **= (을)를 이용할 수가 없습니다.

    •   fflush() 함수는 이용할 수 없습니다.

-W re-interval
--re-interval
    정규 표현의 매칭으로 인터벌 표현 (interval expressions) (을)를 유효하게 합니다 (후술의 정규 표현 (을)를 참조해 주세요). 인터벌 표현은 전통적인 AWK 언어에서는 이용할 수 없었습니다. awk (와)과 egrep 하지만 일관성을 가지도록(듯이),POSIX 표준이 이것들을 추가했습니다. 그러나, 이것들을 사용하면(자) 낡다 AWK 프로그램을 움직이고 없애 버리기 때문에, 이 옵션에 의해 요구되었을 때와 --posix 하지만 지정되었을 때에, gawk (은)는 이러한 기능을 제공합니다.

-W source program-text
--source program-text
    program-text (을)를 AWK 프로그램으로서 이용합니다. 본옵션에 의해, 프로그램 라이브러리화 된 함수 ( -f 또는 --file 옵션을 이용해 읽어들인다)와 명령행으로부터 입력된 프로그램을 간단하게 합성할 수가 있습니다. 이것은, 주로 셸 스크립트로 이용되는 중 규모로부터 대규모 AWK 프로그램 (을)를 위해서(때문에) 준비되었습니다.

-W version
--version
    실행되었다 gawk 프로그램의 버젼 정보를 표준 출력에 써냅니다. 이것은 주로, 당신이 사용하고 있다 gawk 프로그램이 Free Software Foundation 가 배포하고 있고 프로그램 가운데, 최신의 것인지 어떤지를 아는 경우에 편리합니다. 또 버그 리포트 때에도 유용합니다. (본옵션을 지정하면(자), GNU 코딩 규약 에 따라, awk (은)는 즉시 종료해, 성공을 의미하는 종료 스테이터스를 돌려줍니다. )

--  옵션의 종료를 의미합니다. AWK 프로그램에 “-'' 로부터 시작되는 옵션은 아니다 인수를 주는 경우에 편리합니다. 이것은, 주로 다른 POSIX 프로그램의 대부분이 인수에 대해서 실시하는 해석과 일관성을 유지하기 위해서(때문에) 있습니다.

호환 모드에서는, 다른 옵션은 부정이라고 되는지, 무시됩니다. 통상의 실행에 대해, 프로그램 텍스트가 명령행으로 지정되어 있으면, 불명한 옵션은,AWK 프로그램에 ARGV 배열을 통해 건네받습니다. 이것 (은)는,AWK 프로그램을 “#! '' 기구를 이용해 실행하는 경우에 특히 편리합니다.

AWK 프로그램의 실행

AWK 프로그램은, 패턴과 액션의 조의 열과(만약 필요하면) 함수 정의인가 들 됩니다.

    pattern    { action statements }
    function name(parameter list) { statements }

gawk (은)는 우선, program-file (복수가능)(이)가 지정되어 있으면 그리고, --source 의 인수로부터, 혹은, 최초의 옵션이 아닌 인수로부터 프로그램을 읽어들입니다. -f (와)과 --source 옵션은, 명령행으로 여러 차례 지정할 수 있습니다. gawk (은)는, 모든 program-file (와)과 명령행으로 지정한 프로그램을 결 합 해 사용합니다. 새롭게 만들었다 AWK 프로그램 하나 하나에 AWK 함수의 프로그램 라이브러리를 묻을 필요가 없기 때문에, 이 기능은 프로그램 라이브러리의 구축에 편리합니다. 또, 프로그램 라이브러리 함수와 명령행으로 지정한 프로그램을 혼합해 사 일도 가능하게 하고 있습니다.

환경 변수 AWKPATH 에 의해, -f 옵션으로 지정된 파일을 검색하는 패스를 지정할 수 있습니다. AWKPATH 하지만 설정되어 있지 않은 경우의 디폴트 패스는 ". :/usr/local/share/awk" 입니다. (실제의 디렉토리는 gawk 하지만 어떻게 구축/인스톨 되었는지를 의존해, 다양한 것이 됩니다. ) -f 옵션으로 지정한 파일명이 “/'' 를 포함하고 있는 경우는, 패스 검색은 행해지지 않습니다.

gawk (은)는, AWK 프로그램을 다음의 순서로 실행합니다. 우선, -v 옵션으로 지정된 변수에의 대입을 모두 실시합니다. 다음에, 프로그램을 내부 형식에 컴파일 합니다. 그리고, (만약 존재하면) BEGIN 블록 (복수 존재가능)을 실행합니다. 배열 ARGV 그리고 지정된 파일을 순서에 읽어, 처리를 실시합니다 (명령행으로 파일명이 지정되어 있지 않으면, 표준 입력에 대해서 처리를 실시합니다).

명령행으로 지정된 파일명이 var=val 그렇다고 하는 형식이라면, 그것 (은)는 변수에의 대입이다고 해석됩니다. 변수 var (은)는 값 val (으)로 설정됩니다 (이것은, 모든 BEGIN 블록을 실행한 뒤에 행해집니다). 명령행 에서의 변수의 대입은,AWK 가 입력을 필드나 레코드에 분할하기 위한 separator (을)를 실행시로 변경하는데 편리합니다. 또, 1 개의 데이터 파일에 대해 몇차례 처리를 실시할 필요가 있는 경우, 상태를 컨트롤 하는데도 편리합니다.

배열 ARGV 의 요소에 하늘 ("")이 있는 경우, gawk (은)는 그 요소를 무시합니다.

gawk (은)는, 입력된 각 레코드에 대해서 매치 한다 패턴 하지만 AWK 프로그램내에 있는지 어떤지를 검색합니다. 그 레코드에 매치 한 패턴 모두에 임해서, 각각 대응한다 액션 하지만 실행됩니다. 패턴은, 프로그램 텍스트에 출현한 순서로 검색됩니다.

입력이 다하면(자), gawk (은)는 (만약 있으면) END 블록 (복수 존재가능)을 실행합니다.

변수, 레코드, 필드
AWK 에 있어서의 변수는 동적, 즉, 최초로 사용되었을 때에 생성됩니다. 변수의 값은, 부동 소수점수(실수)인가, 캐릭터 라인인가, 혹은 양쪽 모두입니다. 변수가 이용하고 (분)편에 의해 변화합니다. AWK 에서는 또, 1 차원 배열을 이용할 수가 있습니다. 다차원 배열 도, 의사적으로입니다만, 이용 가능합니다. 프로그램 실행 개시시에, 몇개의 정의가 끝난 변수가 설정됩니다. 이것들을 필요에 따라서 설명해, 이하로 정리합니다.

  레코드
통상, 레코드는 개행 캐릭터에 의해 단락지어집니다. 레코드의 단락은, 편입 변수 RS 에 값을 대입하는 것으로써, 제어할 수 있습니다. RS 하지만 단일 캐릭터의 경우, 그 캐릭터가 레코드를 단락짓습니다. 그렇지 않은 경우는, RS (은)는 정규 표현이 됩니다. 입력중의 텍스트로, 이 정규 표현에 매치 하는 것이 레코드를 단락짓습니다. 그러나 호환 모드에서는, 캐릭터 라인치의 최초의 캐릭터만이, 레코드 separator에게 사용됩니다. RS 하지만 공문자열로 설정되어 있을 때는, 레코드는 공행으로 단락지어집니다. RS 하지만 공문자열로 설정되었을 때에는, FS 의 값에 관계없이, 개행 캐릭터는 항상 필드 구분자가 됩니다.

  필드

입력 레코드를 읽어들일 때 마다, gawk (은)는 그 레코드를 필드 에 분할 섬 FS 의 값이 필드 구분자로서 참조됩니다. FS 의 값이 1 캐릭터라면, 그 캐릭터를 경계로 필드가 분할됩니다. FS 하지만 공문자열의 경우, 개개의 캐릭터가 필드 구분자가 됩니다. 머지않아도 아닌 경우, FS (은)는 완전한 정규 표현이다 (이)라고 해석됩니다. 특수한 경우로서 FS 하지만 단일의 공백 때에는, 필드는 연속한 공백·탭·개행에 의해 분할됩니다. (후술의 --posix 의 논의를 참조해 주세요). 변수 IGNORECASE (아래와 같은 참조)의 값은, FS 하지만 정규 표현의 경우 필드 분할에도 영향을 주는 것으로, RS 하지만 정규 표현의 경우 레코드 분할에도 영향을 주는 것에 주의해 주세요.

변수 FIELDWIDTHS 의 값이 공백에서 단락지어진 숫자의 열인 경우, 각 필드는 고정장이다고 해석되어 gawk (은)는 지정된 폭 마다 필드의 분할을 실시합니다. 이 경우, FS 의 값은 무시됩니다. FS 에 새롭게 값을 설정 하는 것으로써, 이 FIELDWIDTHS 의 효과를 지워, 표준의 동작에 되돌릴 수가 있습니다.

입력 레코드중의 각 필드의 값은, 왼쪽으로부터 $1, $2 등이라는 이름으로 참조할 수 있습니다. $0 하 레코드 전체입니다. 필드에 값을 대입할 수도 있습니다. 필드는 정수다 가 아니고, 변수에 의해 참조할 수도 있습니다. 이하의 예에서는, 입력 레코드의 5 번째의 필드의 값을 출력합니다.

    n = 5
    print $n

변수 NF 는, 자동적으로 입력 레코드의 필드의 수로 설정됩니다.

존재하지 않는 필드 (즉, $NF 보다 오른쪽의 필드)를 참조한 결과는 공문자열이 됩니다. 그렇지만, 존재하지 않는 필드에의 대입(비록 , $(NF+2)=5 )(은)는 NF 의 값을 증가시켜,간의 필드에는 공문자가 설정됩니다. 한층 더 $0 의 값은, 필드의 값을 변수 OFS 의 값으로 필드를 단락지은 것으로서 재계산됩니다. 부의 필드 번호에의 참조는 치명적 에러가 됩니다. NF (을)를 감소시키면(자), 새로운 값을 넘는 필드의 값은 없어집니다. $0 의 값은, 필드의 값을 변수 OFS 의 값으로 필드를 단락지은 것으로서 재계산됩니다.

  편입 변수

gawk 의 편입 변수는 이하대로입니다.

ARGC
    명령행 인수의 개수 ( gawk 에의 옵션과 프로그램 지정은 함축 선).

ARGIND
    현재 처리중의 파일명이 격납되고 있는 배열 ARGV 의 인덱스.

ARGV
    명령행 인수의 배열. 배열은, 0 으로부터 ARGC - 1 까지의 인덱스를 가집니다. ARGV 의 내용을 변경하는 것으로, 입력에 이용하는 파일명을 변 갱 할 수가 있습니다.

CONVFMT
    수치의 변환 포맷. 기본값은 "%. 6g" 입니다.

ENVIRON
    현재의 환경 변수의 값으로부터 되는 배열. 배열은, 환경 변수명에 의해 인덱스 되고 , 각 요소의 값은 그 환경 변수의 값입니다 (예를 들면 ENVIRON["HOME"] 는 /home/arnold 되겠지요). 본배열에 대입을 실시해도, gawk (으)로부터 리디렉트나 system() 함수에 의해 실행된다 프로그램의 환경에는 영향을 주지 않습니다(이것은, 장래의 gawk 그럼 변경될 가능성이 있습니다).

ERRNO
    getline 의 리디렉트, getline 에 의한 읽기, close() 함수의 실행시의 어느 쪽인가에 시스템 우류가 발생했을 경우, 변수 ERRNO 에는 에러의 내용을 나타낸 캐릭터 라인이 설정됩니다.

FIELDWIDTHS
    공백에서 단락지어진 필드장의 리스트. 만약 이 값이 설정되어 있으면, gawk 하 FS 의 값을 이용해 필드 분할하는 대신에, 고정장의 필드 분할을 행 있습니다. 고정장의 필드 분할 기능은 아직 실험적인 물건으로, gawk 하지만 개량되는에 따라 의미가 변화할 가능성이 있습니다.

FILENAME
    현재의 입력 파일명. 만약, 명령행으로 입력 파일이 지정되어 있고 없으면, FILENAME 의 값은 “-'' 입니다. 그렇지만, BEGIN 블록내에서는 FILENAME (은)는 미정도리입니다.

FNR 현재의 입력 파일에 있어서의 입력 레코드 번호.

FS  입력 필드 구분자. 디폴트에서는 단일의 공백입니다. 상술의 필드 (을)를 참조해 주세요.

IGNORECASE
    모든 정규 표현과 캐릭터 라인 조작에 대해 대문자 소문자의 구별을 제어합니다. 만약, IGNORECASE 하지만 0 이 아닌 값으로 설정되어 있으면, 캐릭터 라인 비교, 룰의 패턴 매치, FS 에 의한 필드 분할, RS 에 의한 레코드 분할, ~ (와)과 ! ~ 에 의한 정규 표현 매치, 정의가 끝난 함수 gensub(), gsub(), index(), match(), split(), sub() 에 두어 대문자와 소문자의 차이는 무시됩니다. 이 때문에, IGNORECASE 하지만 0 이외의 값이라면, /aB/ (은)는 "ab", "aB", "Ab", "AB" 의 어느 것에도 매치 하게 됩니다. 다른AWK 변수와 같게 IGNORECASE 의 초기치는 0 이므로, 통상은 정규 표현과 캐릭터 라인 조작에 대해 대문자와 소문자는 구별됩니다. Unix 에서는, 대문자 소문자를 무시하는 경우, ISO 8859-1 Latin-1 캐릭터 집합 모두를 사용할 수 있습니다. 주: 3.0 이전의 gawk 그럼 IGNORECASE (은)는 정규 표현 조작에만 영향을 주었습니다. 현재는 캐릭터 라인 비교에도 영향을 줍니다.

NF  현재의 입력 레코드의 필드수.

NR  현재까지 읽어들인 입력 레코드수의 합계.

OFMT
    숫자의 출력 포맷. 기본값은 "%. 6g" 입니다.

OFS 출력 필드 구분자. 디폴트는 공백입니다.

ORS 출력 레코드 separator. 디폴트는 개행입니다.

RS  입력 레코드 separator. 디폴트는 개행입니다.

RT  레코드 터미네이터. gawk (은)는, RS 그리고 지정되는 캐릭터 또는 정규 표현에 매치 하는 입력 텍스트를, RT (으)로 설정합니다.

RSTART
    match() 에 의해 매치 한 최초의 캐릭터의 위치. 0 은 성냥 하지 않았던 것을 나타냅니다.

RLENGTH
    match() 에 의해 매치 한 캐릭터 라인의 길이. -1 (은)는 성냥 하지 않았던 것을 나타냅니다.

SUBSEP
    다차원 배열을 실현할 때에 이용되는, 배열의 인덱스를 결합하는 캐릭터. 기본값은 "\034" 입니다.

  배열

배열은, 브랙킷 ([ (와)과 ]) 의 사이의 식에 의해 인덱스를 지정합니다. 만약 식이 식 의 리스트(식, 식 . . . )(이)라면, 식의 값을 변수 SUBSEP 의 값을 단락으로서 결합한 캐릭터 라인을 인덱스로서 이용합니다. 이것에 의해, 다차원 배열을 시뮬레이트 하고 있습니다. 예를 들면,

    i = "A"; j = "B"; k = "C"
    x[i, j, k] = "hello, world\n"

(은)는, 캐릭터 라인 "hello, world\n" 를, 캐릭터 라인 "A\034B\034C" 로 인덱스 한 배열 x 의 요소에 대입하고 있습니다. AWK 의 배열은 모두, 캐릭터 라인에 의해 인덱스를 실시하는 연상 배열입니다.

특수한 연산자 in (을)를 if 또는 while 스테이트먼트로 이용하는 것에 의해, 어느 인덱스치에 둘 수 있는 배열의 값이 정의되고 있을까를 조사할 수가 있습니다.

    if (val in array)
    	print array[val]

만약, 배열이 다차원 인덱스를 가진다면, (i, j) in array (을)를 이용합니다.

in (은)는 또, for 루프중에서, 배열의 모든 인덱스치에 대해 반복하기 위해서(때문에) 이용할 수가 있습니다.

배열의 요소는, delete 스테이트먼트를 이용해 삭제할 수가 있습니다. delete 스테이트먼트는 또, 첨자를 지정하지 않고 배열명만을 지정하는 것으로써, 배열 전체를 삭제하기 위해서도 사용할 수 있습니다.

  변수의 형태와 변환

변수와 필드는, (부동 소수점수(실수)의) 수치 또는 캐릭터 라인, 혹은 양쪽 모두로서 다루어집니다. 변수의 값이 어떻게 해석될까는, 변수의 쓰여지는 방법에 의해 변화합니다. 수식중에서 이용되면 변수는 수치로서 해석되어 캐릭터 라인으로서 용 필요해지고 캐릭터 라인으로서 해석됩니다.

변수의 값을 강제적으로 수치이다고 해석시키고 싶은 경우는, 변수에 0 을 더합니다. 캐릭터 라인이라고 해석시키고 싶은 경우는 공문자열을 결합합니다.

캐릭터 라인을 수치로 변환할 필요가 있는 경우, 변환은 atof(3) 에 의해 행해집니다. 수치를 캐릭터 라인으로 변환하는 경우는, 변수 CONVFMT 의 값을 포맷 캐릭터 라인으로서 이용해, sprintf(3) 에 의해 행해집니다. AWK 에서는 모든 수치는 부동 소수점수(실수)입니다만, 정수치는 항상 정수 (으)로서 변환을 합니다. 따라서, 이하의 경우,

    CONVFMT = "%2. 2f"
    a = 12
    b = a ""

변수 b (은)는 캐릭터 라인치 "12" 가 되어, "12.00" 는 되지 않습니다.

gawk (은)는, 이하와 같이 해 비교를 실시합니다: 2 개의 변수가 수치라면 수치로서 비 교 합니다. 만약 다른 한쪽이 수치로 다른 한쪽이`수치'캐릭터 라인이라면, 수치로서 비교됩니다. 다른 한쪽이 수치가 아닌 캐릭터 라인이라면, 수치 쪽이 캐릭터 라인에 변환되어 캐릭터 라인으로서 비교됩니다. 양쪽 모두 캐릭터 라인이라면, 캐릭터 라인으로서 비교됩니다. POSIX 표준에 따른다 (이)라면, 양쪽 모두 수치 캐릭터 라인의 경우는 수치로서 비교합니다만, 이것은 아키라등 게실수입니다. gawk (은)는 그러한 동작을 하지 않습니다.

"57" 와 같은 캐릭터 라인 정수는 수치 캐릭터 라인에서는 없고 , 캐릭터 라인 정수입니다. 「수치 캐릭터 라인」의 개념은, 필드, getline 의 입력, FILENAME , ARGV 의 요소, ENVIRON 의 요소, 수치 캐릭터 라인으로부터 split() 에 의해 작성된 배열의 요소 에 대해서만 적용됩니다. 기본적인 생각에서는, 유저 입력 , 그것도 수치로 보이는 유저 입력만이 수치로서 다루어집니다.

초기화되어 있지 않은 변수는, 수치로서는 0 을, 캐릭터 라인으로서는 "" (공문자열)을 가집니다.

패턴과 액션
awk 하행 지향의 언어입니다. 우선 패턴, 다음에 액션이 계속됩니다. 액션은 { (와)과 } 그리고 둘러쌉니다. 패턴 또는 액션은 생략 할 수도 있습니다. 물론, 양쪽 모두 생략 해 버려 의미가 없습니다. 패턴이 없는 경우, 액션은 모든 입력 레코드에 대해 적용됩니다. 생략 된 액션은 이하와 등가입니다.

    { print }

이것은 레코드 전체를 출력합니다.

코멘트는 캐릭터 “#'' 로 시작되어, 줄 끝까지 계속됩니다. 공행은, 복수 스테이트먼트의 사이를 비우는데 사용할 수가 있습니다. 통상, 스테이트먼트는 개행으로 끝납니다. 다만, 다음의 기호로 행이 끝나는 경우에는 이 마지막으로는 없습니다: “,'', {, ?, :, &&, || do 또는 else 그리고 끝나는 행은, 스테이트먼트가 자동적으로 이후 의 행에 계속됩니다. 또, 개행의 직전에 “\'' 를 두는 것으로, 행을 계속할 수가 있습니다. 이 경우, 그 개행은 무시됩니다.

“;'' 로 단락짓는 것으로, 1행에 복수의 스테이트먼트를 기술할 수가 있습니다. (통상과 같이) 패턴-액션 대 중국의 액션부에 있어서의 스테이트먼트 만이 아니고, 패턴-액션대 스테이트먼트 자신도, “;'' 그리고 단락지어 복수 둘 수가 있습니다.

  패턴
AWK 의 패턴은, 이하 중 머지않아인가입니다.

    BEGIN
    END
    /regular expression/
    relational expression
    pattern && pattern
    pattern || pattern
    pattern ?  pattern : pattern
    (pattern)
    ! pattern
    pattern1, pattern2

BEGIN (와)과 END (은)는 특수한 패턴이며, 입력이라고 비교될 것은 없습니다. 모든 BEGIN 패턴에 대응한 액션부는 결합되어 그러한 모든 액션부가 단일의 BEGIN 블록중에 있는것 같이 다루어집니다. 결합된 액션은, 모든 입력 파일의 읽어들여에 앞서 실행됩니다. (와)과 같이 모든 END 블록은 결합되어 모든 입력 파일의 처리 후 (혹은, exit 스테이트먼트 하지만 실행되었을 때)에 실행됩니다. BEGIN (와)과 END (은)는 패턴 진묘쵸우에 기록되어 있는 일에서 다른 패턴과 혼합해 사용할 수 없습니다. 또, BEGIN (와)과 END 패턴은 액션부를 생략 할 수가 없습니다.

/regular expression/ 패턴에서는, 정규 표현 (regular expression) 에 매치 한 입력 레코드에 대해서 액션 하지만 실행됩니다. 정규 표현은 egrep(1) (와)과 같은 것이 사용할 수 있습니다. 나중에 요약을 나타냅니다.

관계식(relational expression) 그럼, 후술의 액션에 대한 마디로 가리키는 연산자를 이용하는 것이 할 수 있습니다. 이것들은 대체로, 특정의 필드가 정규 표현에 매치 하는지 어떤지를 조사하기 위해서(때문에) 이용됩니다.

연산자 &&, ||, ! (은)는, 각각 C 언어에서의 논리 AND, 논리 OR, 논리 NOT 와 등가입니다. C 언어와 같게, 평가치가 확정한 시점에서 이후의 평가를 중지합니다. 이것들은 복수의 패턴식을 결합하기 위해서 사용됩니다. 다른 프로그램 언어와 같이, 괄호에 의해 평가 순서를 변경할 수가 있습니다.

? : 연산자는 C 언어의 것과 같습니다. 만약, 최초의 패턴이 진이라면, 테스트를 위해서(때문에) 2 번째의 패턴이 이용되어 그렇지 않으면 3 번째의 패턴이 이용됩니다. 2 번째와 3 번째의 패턴의 어느 쪽인지만이 평가됩니다.

pattern1, pattern2 형식은 범위 패턴 (으)로 불립니다. 범위 패턴은, pattern1 에 매치 하는 레코드로부터, pattern2 에 매치 하는 레코드까지의 모두에게 성냥 합니다. 이 형식은, 다른 패턴식과 혼합해 이용할 수 없습니다.

  정규 표현
awk 의 정규 표현은 egrep 의 것과 같게, 확장된 정규 표현입니다. 이하의 원가요소로부터 성립되고 있습니다.

c   메타 캐릭터는 아니다 c 에 매치 합니다.

\c  리터럴 캐릭터 c 에 매치 합니다.

.   개행을 포함한다 임의의 1 캐릭터에 매치 합니다.

^   캐릭터 라인의 선두에 매치 합니다.

$   캐릭터 라인의 종단에 매치 합니다.

[abc...]
    캐릭터 리스트이며, abc. . . 의 어느쪽이든 1 캐릭터에 매치 합니다.

[^abc...]
    캐릭터 리스트의 역이며, abc. . . 이외의 1 캐릭터에 매치 합니다.

r1|r2
    선거말: r1 또는 r2 에 매치 합니다.

r1r2
    결합: r1 의 직후에 r2 하지만 계속되는 것에 매치 합니다.

r+  r 의 1 회 이상의 반복해에 매치 합니다.

r*  r 의 0 회 이상의 반복해에 매치 합니다.

r?  r 의 0 회 또는 1 회의 반복해에 매치 합니다.

(r) 그룹화: r 에 매치 합니다.

r{n}
r{n,}
r{n,m}
    brace중에 1 개나 2 개의 수치를 기술하는 것으로써, 인터벌 표현 (을)를 나타냅니다. brace중에 수치가 1 개 있는 경우, 직전의 정규 표현 r 하지만 n 회 반복해집니다. 2 개의 수치가 콤마로 단락지어지고 있는 경우, r 하 n 회부터 m 회 반복해집니다. 1 개의 수치에 이어 콤마가 있는 경우, r (은)는 적어도 n 회 반복해집니다.

    인터벌 표현은 --posix 또는 --re-interval 하지만 명령행에서 지정되어 있을 때 마셔 이용 가능합니다.

\y  말의 선두 또는 말미의 공문자열에 매치 합니다.

\B  말안의 공문자열에 매치 합니다.

\<  말의 선두의 공문자열에 매치 합니다.

\>  말의 말미의 공문자열에 매치 합니다.

\w  말을 구성하는 캐릭터 (레터, 수치, 언더스코어)에 매치 합니다.

\W  말을 구성하는 캐릭터 이외의 캐릭터에 매치 합니다.

\`  버퍼 (캐릭터 라인)의 선두의 공문자열에 매치 합니다.

\'  버퍼의 말미의 공문자열에 매치 합니다.

캐릭터 라인 정수중에서 이용할 수가 있는 escape sequence (후술 참조)는, 정규 표현중에서도 사용할 수가 있습니다.

캐릭터 클래스 (은)는 POSIX 표준으로 도입된 신기능입니다. 캐릭터 클래스는 특정의 속성을 가지는 캐릭터 라인 리스트의 특수 표현입니다만, 실제의 캐릭터 집합 자신은 나라나 캐릭터 집합에 의해 여러가지 것이 됩니다. 예를 들면, 알파벳 캐릭터는 미국합주국으로 프랑스와는 다릅니다.

캐릭터 클래스가 유효한 것은, 캐릭터 리스트의 브랙킷안의 정규 표현 뿐입니다. 캐릭터 클래스는, [: 라고 클래스를 표현하는 키워드와 :] (으)로 구성됩니다. 이하에 POSIX 표현으로 정의되는 캐릭터 클래스를 나타냅니다.

[:alnum:]
    알파벳과 수치 캐릭터.

[:alpha:]
    알파벳 캐릭터.

[:blank:]
    공백과 탭 캐릭터.

[:cntrl:]
    제어 캐릭터.

[:digit:]
    수치 캐릭터.

[:graph:]
    인자 가능하고 가시인 캐릭터. (공백은 인자 가능합니다만 보이지 않습니다. 한편 a (은)는 인자 가능한 동시에 가시입니다. )

[:lower:]
    알파벳 캐릭터의 소문자.

[:print:]
    인자 가능한 캐릭터 (제어 캐릭터 이외).

[:punct:]
    구두점 캐릭터 (레터, 수치, 제어 캐릭터, 공백 캐릭터의 머지않아도 아닌 캐릭터).

[:space:]
    공백 캐릭터 (공백, 탭, form feed등의 소수의 캐릭터를 가리킨다).

[:upper:]
    알파벳 캐릭터의 대문자.

[:xdigit:]
    16 진수의 수치.

예를 들면,POSIX 표준 이전으로는, 알파벳과 수치의 캐릭터에 매치 하기 위해서는, /[A-Za-z0-9]/ (이)라고 썼습니다. 그러나, 다른 알파벳 캐릭터가 캐릭터 집합에 포함되는 경우, 그것들에는 매치 하지 않습니다. POSIX 캐릭터 클래스에서는, /[[:alnum:]]/ (와)과 기술할 수가 있어 캐릭터 집합의 모두 의 알파벳과 수치에 매치 합니다.

캐릭터 리스트중에는, 더욱 2 개의 특수 순차 순서를 사용할 수 있습니다. 이것들은, 복수의 캐릭터에 의해 표현되는 단일 심볼 ( 조합 캐릭터 (으)로 불립니다)를 가져, 복수의 캐릭터가 참조 (이)나 정렬에 대해 등가이라고 되는, 비 ASCII 캐릭터 집합에 적용됩니다. (예를 들면, 프랑스어에서는 단순한 “e'' 와 그레이브아크센트 첨부의 e` 와는 등가입니다. )

조합 심볼
    참조 심볼은 복수 캐릭터의 참조 요소이며, [. (와)과 . ] 그리고 괄. 예를 들면, ch 하지만 참조 요소의 경우, [[.ch. ]] (은)는 정규 표현이 되어, 이 참조 요소에 매치 합니다. 한편, [ch] 하 c 인가 h 에 매치 하는 정규 표현입니다.

등가 클래스
    등가 클래스는 등가인 캐릭터 리스트를 가리키는 로케일 고유의 이름입니다. 이름은 [= (와)과 =] 그리고 괄. 예를 들면, 이름 e (은)는 “e,'' “e`,'', “e`. '' 의 모든 것을 표현하기 위해서 사용될지도 모릅니다. 이 경우, [[=e=]] 하 e, e', e` 의 어느 쪽인가에 매치 하는 정규 표현이 됩니다.

이러한 기능은 영어 이외의 로케일에서 매우 유용합니다. gawk 하지만 정규 표현의 매칭에 사용하는 프로그램 라이브러리 함수는, 현재 POSIX 캐릭터 클래스만을 이해해, 참조 심볼과 등가 클래스는 이해하지 않습니다.

\y, \B, \<, \>, \w, \W, \`, \' 의 연산자는 gawk 고유하고,GNU 정규 표현 프로그램 라이브러리의 기능을 바탕으로 한 확장입니다.

여러가지 명령행 옵션에 의해, 정규 표현중의 캐릭터를 gawk 하지만 어떻게 해석하는지를 제어할 수 있습니다.

옵션 없음
    디폴트에서는, gawk (은)는 상술의 POSIX 정규 표현 및 GNU 정규 표현의 모든 기능을 제공합니다. 그렇지만, 인터벌 표현은 서포트되지 않습니다.

--posix
    POSIX 정규 표현만이 서포트되어GNU 연산자는 서포트되지 않습니다 (예를 들면, \w (은)는 리터럴 w 에 매치 합니다). 인터벌 표현은 용서됩니다.

--traditional
    전통적인 Unix awk 의 정규 표현이 서포트됩니다. GNU 연산자, 인터벌 표현, POSIX 캐릭터 클래스 ( [[:alnum:]] 등)은 서포트되지 않습니다. 8 진 또는 16 진의 escape sequence로 표현되는 캐릭터는, 정규 표현의 메타 캐릭터를 표현한다고 해도, 리터럴로서 다루어집니다.

--re-interval
    --traditional 하지만 지정되어 있었다고 해도, 정규 표현중에서 인터벌 표현을 서포트합니다.

  액션
액션은, brace { (와)과 } 그리고 둘러쌉니다. 액션은 통상의 대입, 조건문, 루프문등으로부터 됩니다. 연산자, 제어문, 입출력문은 C 언어와 거의 같습니다.

  연산자

AWK 에서의 연산자를, 우선 순위의 높은 것으로부터 순서에 나타냅니다.

(...)
    그룹화.

$   필드 참조.

++ --
    인크리먼트(increment), 감소. 전치도 후치도 가능.

^   나무승 (** 도 같은 의미로 사용할 수 있다. 또 **= 대입 연산자도 존재한다).

+ - !
    단항의 플러스, 마이너스, 논리 부정.

* / %
    곱셈, 제산, 잉여.

+ - 가산과 감산.

space
    캐릭터 라인 결합.

< >
<= >=
! = ==
    통상의 관계 연산자.

~ ! ~
    정규 표현 매치, 부정의 매치. 주의: ~ (와)과 ! ~ 의 좌변에 정규 표현 정수 (/foo/등) (을)를 이용해서는 안됩니다. 정규 표현 정수는 우변에게만 둘 수가 있습니다. 식 /foo/ ~ exp 하 (($0 ~ /foo/) ~ exp) 와 등가이며, 이것은 통상 의도하는 것과는 다릅니다.

in  배열의 멤버.

&&  논리 AND.

||  논리 OR.

? : C 언어의 조건식과 같습니다. expr1 ? expr2 : expr3 의 형식에서 사용합니다. 만약 expr1 하지만 진이라면 식의 값은 expr2 (이)가 되어, 그렇지 않으면 expr3 (이)가 됩니다. expr2 인가 expr3
     중 다른 한쪽만이 평가됩니다.

= += -=
*= /= %= ^=
    대입. 절대 대입 (var = value) (와)과 연산자 대입 (다른 형식)이 서포트되고 있습니다.

  제어 스테이트먼트
제어 스테이트먼트는 이하대로입니다.
    if (condition) statement [ else statement ]
    while (condition) statement
    do statement while (condition)
    for (expr1; expr2; expr3) statement
    for (var in array) statement
    break
    continue
    delete array[index]
    delete array
    exit [ expression ]
    { statements }

  입출력 스테이트먼트
입출력 스테이트먼트는 이하대로입니다.
close(file)
    파일 (또는 파이프, 아래와 같이 참조)을 클로우즈 합니다.
getline
    다음의 레코드를 $0 에 읽어들입니다. NF, NR, FNR 하지만 설정됩니다.
getline <file
    파일 file (으)로부터 다음의 레코드를 $0 에 읽어들입니다. NF 하지만 설정됩니다.
getline var
    다음의 레코드를 변수 var 에 읽어들입니다. NR, FNR 하지만 설정됩니다.
getline var <file
    파일 file (으)로부터 다음의 레코드를 변수 var 에 읽어들입니다.
next
    현재의 레코드에 대한 처리를 종료해, 다음의 레코드를 읽어들여,AWK 프로그 램의 최초의 패턴으로부터 처리를 개시합니다. C 언어의 continue 와 유사한 의미를 가집니다. 만약, 입력 데이터의 종단에 이르렀을 경우, END 블록이 존재하면 실행됩니다.
nextfile
    현재의 입력 파일에 대한 처리를 종료해, 다음의 입력 파일로부터 레코드를 읽어들입니다. FILENAME (와)과 ARGIND 하지만 갱신되어 FNR 하지만 1 에 리셋트 되어AWK 프로그램의 최초의 패턴으로부터 처리가 개시됩니다. 입력 데이터의 종단에 이르렀을 때는, 만약 존재하면, END 블록이 실행됩니다. 주: 이전의 버젼의 gawk 에서는 next file (와)과 2 어로 사용되고 있었습니다. 이 용법은 아직 인식됩니다만, 경고 메세지를 일으키게 하고, 최종적으로는 없어지는 표현입니다.
print
    현재의 레코드를 출력합니다. 출력 레코드는 ORS 변수의 값에서 종단 됩니다.
print expr-list
    식을 출력합니다. 각 식은 OFS 의 값으로 단락지어집니다. 출력되는 레코드의 마지막에 하 ORS 의 값이 부가됩니다.
print expr-list >file
    식을 파일 file 에 출력합니다. 각 식은 OFS 의 값으로 단락지어집니다. 출력되는 레코드의 마지막에는 ORS 의 값이 부가됩니다.
printf fmt, expr-list
    서식 첨부 출력입니다.
printf fmt, expr-list >file
    파일 file 에의 서식 첨부 출력입니다.
system(cmd-line)
    명령 cmd-line (을)를 실행해, 종료 스테이터스를 돌려줍니다 (POSIX 에 대응하지 않는다 시스템에서는 사용할 수 없는 경우가 있습니다).
fflush([file])
    오픈되고 있는 출력 파일 또는 파이프 file 에 관련 지을 수 있고 있는 버퍼를 플래시 합니다. file (을)를 지정하지 않으면 표준 출력이 플래시 됩니다. file 하지만 공문자열의 경우, 오픈 떠날 수 있어 모든 파일과 파이프의 버퍼를 플래시 합니다.
그 외의 형식의 리디렉트로서 이하의 것이 이용 가능합니다. print (와)과 printf 에 대해서, >> file (을)를 지정하면(자) 출력은 파일 file 에 추가되어 | command (은)는 출력을 파이프에 대해서 실시합니다. 같이 command| getline (은)는 명령의 출력으로부터 getline (을)를 행합니다. getline (은)는 파일 종단에서는 0 을, 에러시에는 -1 을 돌려줍니다.
주: 루프중에서 getline 에 파이프 기입하는 경우 또는 print 인가 printf (으)로부터 파이프 읽어내 하는 경우, 명령의 신인스턴스를 작성하기 위해서 close() (을)를 사용하는 것이 필요합니다. 파이프가 EOF 를 돌려줄 때에도, AWK 는 자동적으로는 파이프를 닫지 않습니다.

  printf 스테이트먼트
AWK 에서의 printf 스테이트먼트와 sprintf() 함수 (후술 참조)는, 이하의 변환 지정 서식을 받아들입니다.
%c  1 개의 ASCII 캐릭터. %c 에 대응하는 인수가 수치라면, 그 값을 ASCII 코드로 간주해 (이)라고 캐릭터로 변환합니다. 그렇지 않으면, 인수는 캐릭터 라인이다고 해석되어 그 1 캐릭터눈이 출력됩니다.
%d
%i  10 진수 (정수 부분).
%e
%E  [-]d.dddddde[+-]dd 그렇다고 하는 형식의 부동 소수점수(실수). %E 형식에서는 e 대신에 E 하지만 사용됩니다.

%f  [-]ddd.dddddd 그렇다고 하는 형식의 부동 소수점수(실수).

%g
%G  %e (와)과 %f 의 짧은 (분)편의 형식의 부동 소수점수(실수). 불필요한 0 은 생략 됩니다. %G 형식에서는 %e 대신에 %E (을)를 사용합니다.

%o  부호 없음의 8 진수 (정수).

%u  부호 없음의 10 진수 (정수).

%s  캐릭터 라인.

%x
%X  부호 없음의 16 진수 (정수). %X 형식에서는, abcdef 대신에 ABCDEF (을)를 이용합니다.

%%  단일의 캐릭터 %

% (와)과 상기의 제어 캐릭터와의 사이에 옵셔널인 추가의 파라미터를 둔다 일이 생깁니다. 이하에 그것들을 나타냅니다.

-   왼쪽 맞춤.

공백  수치 변환에 대해, 정의 값의 프레픽스는 공백이 되어, 부의 값의 프레픽스는 마이너스 기호가 됩니다.

+   플러스 기호는 폭수정자 (후술)의 앞에 사용해, 정형되는 데이터가 정이었다고 해도, 수치 변환에 대해서 항상 부호를 붙이는 것을 지시합니다. + (은)는 공백 수정자에게 우선합니다.

#   어느 제어 레터에 대해서 「다른 형식」을 사용합니다. %o 에 대해서는 선행하는 0 을 줘 %x (와)과 %X 에 대해서는 비 0 의 결과에 대해서 선행한다 0x (와)과 0X (을)를 줍니다. %e, %E, %f 에 대해서는 결과에 항상 소수점을 포함합니다. %g, %G 에 대해서는 결과의 말미로부터 0 을 없애지 않습니다.

0   선두의 0 (제로)(은)는 플래그로서 동작해, 출력을 공백은 아니고 0 으로 패딩 하는 것을 나타냅니다. 이것은 비수치의 출력 서식에 대해서도 적용됩니다. 이 플래그가 유효한 것은, 필드폭이 인자되는 값의 폭보다 넓을 때 뿐입니다.

width
    필드가 지정한 폭 width (이)가 되도록(듯이) 패딩 됩니다. 필드는 통상 공백에서 패딩 됩니다. 0 플래그가 사용되었을 경우에는 0 으로 패딩 됩니다.

.prec
    인자에 대해 사용하는 정밀도를 수치로 지정합니다. %e, %E, %f 의 서식에 대해서는, 소수점의 우측으로 인자되는 숫자의 수를 지정합니다. %g, %G 의 서식에 대해서는, 가수부의 최대수를 지정합니다. %d, %o, %i, %u, %x, %X 의 서식에 대해서는, 인자되는 숫자의 최소수를 지정합니다. 캐릭터 라인에 대해서는, 인자되는 캐릭터 라인으로부터 꺼내지는 최대의 캐릭터수를 지정합니다.

ANSI C 의 printf() 의 동적인 폭 width (와)과 정밀도 prec 의 지정 기능을 사용할 수 있습니다. 폭 또는 정밀도 의 지정 부분에 * (을)를 지정하는 것으로, 그 값을 printf 또는 sprintf() 에의 인수로 지정할 수 있습니다.

  특수 파일명

print (이)나 printf 그리고 기입 때라도, getline 그리고 파일로부터 읽어낼 때에도, 입출력 리디렉트를 실시하는 경우, gawk (은)는 내부적인 특수한 파일명을 해석합니다. 이러한 파일명에 의해, parent process (통상은 쉘입니다)로부터 계승했다 오픈 상태의 파일 기술자를 고용해 입출력을 실시하거나 실행중의 gawk 프로세스에 관한 정보를 얻을 수 있습니다. 특수 파일명은 이하대로입니다.

/dev/pid
    현재의 프로세스의 프로세스 ID (10 진수로, 마지막에 개행이 붙습니다)를 읽어들일 수가 있습니다.

/dev/ppid
    현재의 프로세스의 부모의 프로세스의 프로세스 ID (10 진수로, 마지막에 개행이 붙습니다)를 읽어들일 수가 있습니다.

/dev/pgrpid
    현재의 프로세스의 프로세스 그룹 ID (10 진수로, 마지막에 개행이 붙습니다) (을)를 읽어들일 수가 있습니다.

/dev/user
    이 파일을 읽는 것으로, 개행으로 끝나는 단일의 레코드를 얻을 수 있습니다. 각 필드는 공백에서 단락지어지고 있습니다. $1 하 getuid(2) 시스템 콜의 값, $2 하 geteuid(2) 시스템 콜의 값, $3 하 getgid(2) 시스템 콜의 값, $4 하 getegid(2) 시스템 콜의 값입니다. 만약, 한층 더 필드가 있으면, 그것은 getgroups(2) 시스템 콜이 돌려주는 그룹 ID 의 리스트입니다. 모든 시스템으로 복수의 그룹이 서포트되고 있는 것은 아닙니다.

/dev/stdin
    표준 입력.

/dev/stdout
    표준 출력.

/dev/stderr
    표준 에러 출력.

/dev/fd/n
    오픈된 파일 기술자 n 에 대응하고 있는 파일.

에러 메세지를 출력하려면 , 이하의 방법이 편리합니다.

    print "You blew it! " > "/dev/stderr"

만약 이 기능이 없었으면, 다음과 같이 할 수 밖에 없는 곳입니다.

    print "You blew it! " | "cat 1>&2"

이러한 파일명은, 명령행의 데이터 파일 지정으로 사용할 수도 있습니다.

  수치 함수

AWK 는 이하의 정의가 끝난 수치 함수를 가지고 있습니다.

atan2(y, x)
    y/x 의 역탄젠트를 라디안으로 줍니다.

cos(expr)
    expr 의 여현을 라디안으로 줍니다.

exp(expr)
    지수함수.

int(expr)
    정수에의 잘라버림.

log(expr)
    자연대수.

rand()
    0 에서 1 의 사이의 난수를 줍니다.

sin(expr)
    expr 의 정현을 라디안으로 줍니다.

sqrt(expr)
    평방근.

srand([expr])
    expr 의 값을 난수 생성 함수의 종으로서 이용합니다. 식이 지정되지 않았던 경우는, 시각이 이용됩니다. 직전의 종의 값을 돌려줍니다.

  캐릭터 라인 함수

gawk (은)는 이하의 정의가 끝난 캐릭터 라인 함수를 가지고 있습니다.

gensub(r, s, h [, t])
    대상 캐릭터 라인 t (으)로부터 정규 표현 r 의 매치을 찾습니다. h 하지만 g 또는 G 그리고 개시하는 캐릭터 라인의 경우, 매치 한다 r (을)를 모두 s 에 옮겨놓습니다. 그렇지 않은 경우, h (은)는 몇번째의 r 의 매치을 옮겨놓는지를 나타냅니다. t 하지만 주어지지 않는 경우, 대신에 $0 하지만 사용됩니다. 치환 텍스트 s 그럼, 순차 순서 \n 다만 n (은)는 1 에서 9 까지의 숫자를 사용해, n 번째에 매치 한 괄호 첨부 서브식을 나타낼 수가 있습니다. 순차 순서 \0 (은)는 캐릭터 & (와)과 같이, 매치 한 텍스트 전체를 나타냅니다. sub() (이)나 gsub() 과는 달리, 수정된 캐릭터 라인이 함수의 결과로서 돌려주어 원래의 대상 텍스트는 변경되고 선

gsub(r, s [, t])
    캐릭터 라인 t 안으로 정규 표현 r 에 매치 한 부분을 모두 s 에 치환합니다. 치환의 개수를 돌려줍니다. t (을)를 지정하지 않았던 경우는 $0 하지만 이용됩니다. 치환 텍스트에서는, & (은)는 실제로 매치 한 텍스트로 옮겨놓을 수 있습니다. \& (을)를 사용하면(자) 리터럴의 & (을)를 얻을 수 있습니다. sub(), gsub(), gensub() 에 있어서의 & (와)과 backslash에 관한 완전한 논의는 Effective AWK Language Programming (을)를 참조해 주세요.

index(s, t)
    캐릭터 라인 s 안에 포함되는 캐릭터 라인 t 의 위치를 돌려줍니다. t 하지만 포함되지 않은 경우는 0 을 돌려줍니다.

length([s])
    캐릭터 라인 s 의 길이를 돌려줍니다. s 를 지정하지 않았던 경우에는 $0 의 길이를 돌려줍니다.

match(s, r)
    캐릭터 라인 s 안으로 정규 표현 r 에 매치 하는 위치를 돌려줍니다. 성냥 하지 않는 경우는 0 을 돌려줍니다. RSTART (와)과 RLENGTH 의 값이 설정됩니다.

split(s, a [, r])
    캐릭터 라인 s (을)를 정규 표현 r (을)를 이용해 분할해, 배열 a 에 격납합니다. 필드수를 돌려줍니다. r 하지만 생략 되고 경우는 FS 하지만 이용됩니다. 배열 a 의 내용은, 분할전에 클리어 됩니다. 분할은, 상술의 필드 분할과 같은 동작을 실시합니다.

sprintf(fmt, expr-list)
    서식 fmt 에 따라 exp-list (을)를 정형 표시해, 결과의 캐릭터 라인을 돌려줍니다.

sub(r, s [, t])
    gsub() (와)과 닮아 있습니다만, 최초로 매치 한 캐릭터 라인만이 치환됩니다.

substr(s, i [, n])
    캐릭터 라인 s 의 i 캐릭터눈으로부터 시작되는 최대 n 캐릭터의 부분 캐릭터 라인을 돌려줍니다. n 하지만 생략 되었을 경우, i 캐릭터눈 이후의 부분 캐릭터 라인이 돌려주어집니다.

tolower(str)
    캐릭터 라인 str (을)를 카피해, 대문자를 모두 소문자로 변환한 것을 돌려줍니다. 알파벳이 아닌 캐릭터는 변화하지 않습니다.

toupper(str)
    캐릭터 라인 str (을)를 카피해, 소문자를 모두 대문자로 변환한 것을 돌려줍니다. 알파벳이 아닌 캐릭터는 변화하지 않습니다.

  시간 함수

타임 스탬프를 포함한 로그 파일의 처리는 AWK 프로그램의 주된 용도의 하나이기 때문에, gawk (은)는 타임 스탬프를 꺼내거나 포맷 하기 위한 2 개의 함수를 제공합니다.

systime()
    기준 시점으로부터의 경과초수를 돌려줍니다 (POSIX 시스템에서는, 기준 시점은 UTC 로 1970 년 1 월 1 일 0:00 입니다).

strftime([format [, timestamp]])
    서식 format 에 따라 timestamp (을)를 포맷 합니다. timestamp 하 systime() 하지만 돌려주는 값과 같은 형식이 아니면 안됩니다. timestamp 하지만 생략 되었을 경우, 현재의 일자가 사용됩니다. format 하지만 생략 되었을 경우, date(1) 하지만 출력에 사용하는 것과 같은 디폴트 포맷이 사용됩니다. 이용 가능한 포맷에 대해서는,ANSI C 의 strftime() 함수의 사양을 참조해 주세요. 퍼블릭 도메인인 strftime(3) (와)과 그 메뉴얼 페이지가 gawk (와)과 함께 배포되고 있습니다. 만약, gawk (을)를 작성하기 위해서 그 strftime (을)를 이용했을 경우는, 그 메뉴얼에 기술되고 있는 변환 서식이 gawk 그렇지만 이용 가능합니다.

  캐릭터 라인 정수

AWK 에서의 캐릭터 라인 정수는, 더블 쿼트 (")에 좁아질 수 있었던 캐릭터의 열입니다. 캐릭터 라인내에서는, C 언어와 같이 몇개의 escape sequence 하지만 사용할 수 있습니다.

\\  backslash 그 자체.

\a  「경고」캐릭터. 통상은 ASCII BEL 캐릭터입니다.

\b  백 스페이스.

\f  개페이지 (form feed).

\n  개행.

\r  복귀 (왕복대 리턴).

\t  수평 탭.

\v  수직 탭.

\xhex digits
    \x 에 계속되는 16 진수로 표현된 캐릭터. ANSI C 와 같게, \x 에 계속되는 모든 16 진수자 (은)는 escape sequence의 일부이다고 보입니다. (이 기능에 의해 코밋티에 의한 언어 디자인을 알 수 있습니다. ) 예를 들면, "\x1B" 는 ASCII ESC (이스케이프) 캐릭터입니다.

\ddd
    1 자리수나 2 자리수나 3 자리수의 8 진수로 표현된 캐릭터. 예를 들면, "\033" 는 ASCII ESC (이스케이프) 캐릭터입니다.

\c  캐릭터 c 그 자체.

escape sequence는 정규 표현 정수내에서도 이용할 수가 있습니다 (예를 들면, /[ \t\f\n\r\v]/ (은)는 공백 캐릭터에 매치 합니다).

호환 모드에서는, 8 진 및 16 진의 escape sequence로 표현되는 캐릭터는, 정규 표현 정수로서 사용되었을 경우, 리터럴로서 다루어집니다. 그러므로, /a\52b/ 하 /a\*b/ (와)과 등가입니다.

함수
AWK 에서는 함수를 이하와 같이 해 정의합니다.

    function name(parameter list) { statements }

함수는, 패턴 또는 액션의 식으로부터 불려 갔을 때에 실행됩니다. 함수 호출에 대해 주어진 열매 인수가, 함수 선언에 있어서의 가인수에 주고 받아집니다. 이 때 배열의 경우는 참조 인도를 해 다른 변수의 경우는 값인도로 행해집니다.

원래 AWK 에 함수는 갖춰지고 있지 않았으므로, 국소 변수의 기구는 별로 스마트하지는 않습니다. 국소 변수는 인수 리스트의 여분의 인수로서 선언합니다. 국소 변수와 관 수인수를 구별하기 위해(때문에), 여분의 공백에서 단락짓는 것이 관습입니다. 예를 들면, 이하의 것 게 합니다.

    function  f(p, q,     a, b)	# a & b 는 국소 변수
    {
    	. . .
    }
    /abc/	{ . . .  ; f(1, 2) ; . . .  }

함수 호출해에 있어서의 왼쪽 괄호는, 공백을 협 우선에 함수명의 직후에 두지 않으면 안됩니다. 이것은, 캐릭터 라인 결합 연산자와의 애매함을 일으키게 한 없기 위해(때문에) 필요합니다. 이 제한은, 상술의 편입 함수에는 들어맞지 않습니다.

함수는, 다른 함수를 호출하거나 자기 자신을 재귀적으로 호출할 수가 있습니다. 국소 변수로서 이용되는 함수 인수는, 함수 기동시에 공문자열 및 0 에 초기화됩니다.

함수로부터 값을 돌려주려면 return expr (을)를 사용해 주세요. 값을 지정하지 않는 경우, 또는 함수의 끝부터 “ 떨어진다'' (역주: 함수를 닫는 brace에 도달한다) 것에 따라 함수로부터 돌아오는 경우, 값은 미정도리입니다.

--lint 하지만 지정되었을 때, gawk (은)는 실행시는 아니고 파스시에 미정도리 함수의 호출해에 관해서 경고합니다. 실행시의 미정도리 함수의 호출은 치명적인 에러가 됩니다.

function 의 것인지 비교적 func (을)를 이용할 수가 있습니다.

사용예
“/etc/passwd'' 로부터 전유저의 로그인명을 꺼내, 정렬 해 출력합니다.
	BEGIN	{ FS = ":" }
		{ print $1 | "sort" }
파일의 행수를 센다.
		{ nlines++ }
	END	{ print nlines }
행 번호를 매긴다.
	{ print FNR, $0 }
전파일을 통한 행 번호를 매긴다.
	{ print NR, $0 }

관련 항목
egrep(1), getpid(2), getppid(2), getpgrp(2), getuid(2), geteuid(2), getgid(2), getegid(2), getgroups(2)

The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.

Effective AWK Language Programming, Edition 1.0, published by the Free Software Foundation, 1995.

POSIX 호환
gawk (은)는 최신판의 UNIX awk (와)과의 호환성 뿐만이 아니라,POSIX 표준과의 호환성도 추구하고 있습니다. 이 때문에 gawk 에는 이하와 같은 기능이 받아들여지고 있습니다. 이러한 기능은 AWK 책에는 진술되고 있지 않습니다만, Bell Labs 및 POSIX 표준의 awk 하지만 가지고 있는 기능입니다.

프로그램 실행전에 변수 대입을 행한다 -v 옵션은 새로운 것입니다. AWK 책에 의하면, 명령행으로 지정된 변수 대입은 awk 하지만 인수를 파일명으로서 오픈할 때에 행해지게 됩니다. 즉 이것은 BEGIN 블록의 실행 다음에. 그렇지만 초기의 무렵의 실장에서는, 인수 중(안)에서 파일명에 앞서 변수 대입이 지정되어 있는 경우에는, 대입은 BEGIN 블록 실행의 전에 행해지고 있었습니다. 그리고 어플리케이션은, 이 「사양」에 의존한다 같게 되었습니다. awk 하지만 그 문서에 맞도록(듯이) 고쳐졌을 때, 옛 동작에 의존하고 있다 어플리케이션의 편의를 꾀하기 위해서(때문에) 이 옵션이 더해졌습니다. (이 사양은 AT&T 및 GNU 의 개발자들에 의해 합의되었습니다. )

독자 기능을 위한 -W 옵션은 POSIX 표준에 따른 것입니다.

인수의 열에 특별한 옵션 “--'' 를 지정하면(자), gawk (은)는 거기가 옵션의 마지막이다고 해석합니다. 호환 모드에 대해 미정도리 옵션은 경고가 출력되어 그 이외의 것은 무시됩니다. 통상의 실행에 대해 나머지의 인수는 AWK 프로그램에 인도해집니다.

AWK 책은 srand() 의 돌아가 값을 정의하고 있지 않습니다. POSIX 표준 그럼, 그 함수가 사용하고 있는 종을 돌려주어, 난수 순차 순서를 추적할 수 있도록(듯이) 하고 있습니다. 따라서 gawk 에 있어서의 srand() 도 현재의 종을 돌려주도록(듯이) 되어 있습니다.

그 외에도 이하와 같은 신기능이 있습니다. -f 옵션의 여러 차례 사용 (MKS awk에모방했습니다); ENVIRON 배열; escape sequence \a (와)과 \v ( gawk 그리고 최초로 실장되어 AT&T 의 awk 에 피드백되었습니다); 편입 함수 tolower() (와)과 toupper() (AT&T 에 모방했습니다); printf 에 있어서의 ANSI C 변환 지정 (AT&T 판으로 최초로 실장되었습니다).

GNU 확장
gawk (은)는 POSIX awk 에 대해서 많은 확장이 행해지고 있습니다. 이 마디에서는 그것들에 대해 해설합니다. --traditional 옵션 첨부로 gawk (을)를 기동하는 것에 의해, 여기서 진술되고 있는 확장 기능을 모두 금지할 수가 있습니다.

gawk 하지만 가지는 이하의 기능은 POSIX awk 그럼 사용할 수 없습니다.

    •   escape sequence \x --posix 그리고 억제할 수 있습니다. )

    •   fflush() 함수. ( --posix 그리고 억제할 수 있습니다. )

    •   systime(), strftime(), gensub() 의 각 함수.

    •   입출력 리디렉트로 이용 가능한 특수 파일명은 이해되지 않습니다.

    •   변수 ARGIND, ERRNO, RT (은)는 특수 변수가 아닙니다.

    •   변수 IGNORECASE (와)과 그 부작용은 이용할 수 없습니다.

    •   변수 FIELDWIDTHS (와)과 고정장 필드 분할.

    •   RS 의 정규 표현으로서의 사용.

    •   FS 에 공문자열을 설정하는 것으로써 각 캐릭터를 자르는 능력과 split() 의 3 번째의 인수.

    •   -f 옵션으로 지정된 파일명에 대해 패스 검색을 실시하지 않는 것. 따라서, 환경 변수 AWKPATH (은)는 특수한 변수가 아닙니다.

    •   현재의 입력 파일에 대한 처리를 끝내기 위해서(때문에) 사용된다 nextfile

    •   배열 전체를 삭제하기 위해서 사용된다 delete 배열

AWK 책은 함수 close() 의 돌아가 값을 정의하고 있지 않습니다. gawk 의 close() (은)는, 파일이나 파이프를 클로우즈 할 때에 호출한다 fclose(3) (이)나 pclose(3), (으)로부터의 돌아가 값을 돌려줍니다.

옵션 --traditional 부착으로 gawk (을)를 기동해 -F 옵션에의 인수 fs (으)로서 “t'' 를 주었을 경우에, FS 의 값은 탭 캐릭터로 설정됩니다. gawk -F\t . . . (와)과 타이프 쳐도, 쉘이 단지 “t'' 를 쿼트 하므로,“\t'' 는 -F 옵션에게 건네지지 않습니다. 이것은 조금 보기 흉한 특수 사례이므로, 디폴트의 동작으로서는 채용되고 있지 않습니다. --posix (을)를 지정했을 경우에도, 이 동작은 행해지지 않습니다. 탭 캐릭터를 필드 구분자로서 사용하고 싶은 경우에는, 쿼트를 사용하는 것이 최선입니다: gawk -F'\t' . . . .

역사적 기능
gawk (은)는 역대의 AWK 의 실장에 있던 2 개의 기능을 갖추고 있습니다. 1 채우고로서 짜넣어 함수 length() (은)는 인수 없음으로 호출할 수 있을 뿐만 아니라, 한층 더 괄호 없음에서도 호출할 수 있습니다! 따라서

    a = length    # Holy Algol 60, Batman!

(은)는 이하의 2예와 같습니다.

    a = length()
    a = length($0)

POSIX 표준에서는 이 기능은 “deprecated'' 와 설명서 되고 있어 gawk 그럼 명령행으로 --lint (을)를 지정했을 경우에, 이 기능의 사용에 대해서 경고를 출력합니다.

이제(벌써) 1 개(살)은, while, for, do 루프 본체의 밖에서도 continue, break 스테이트먼트를 사용할 수 있다고 하는 기능입니다. 전통적인 AWK 의 실장에서는, 이와 같이 사용했다 continue 스테이트먼트를 next 스테이트먼트와 등가인 것으로 해 취급해 왔습니다. gawk 그럼 --traditional 하지만 지정되었을 경우에, 이 기능을 사용할 수가 있습니다.

환경 변수
환경에 POSIXLY_CORRECT 하지만 존재하는 경우에는, gawk (은)는 명령행으로 --posix 하지만 지정되어 있을 때와 완전히 같은 동작을 합니다. 이 때 --lint 하지만 지정되어 있으면(자) gawk (은)는 이 작용에 대한 경고 메세지를 출력합니다.

AWKPATH 환경 변수를 사용해, gawk 하지만 -f 및 --file 옵션으로 지정된 파일명을 검색하는 디렉토리를 지정할 수 있습니다.

버그
명령행에서의 변수 대입 기능을 사용하려면 , 변수에의 대입을 직접 명령행에 쓰면 자주(잘), -F 옵션을 붙일 필요는 없습니다. 이 옵션은 옛 awk (와)과의 호환성 (을) 위해서만 남아 있습니다.

파일 /dev/fd 및 /dev/stdin, /dev/stdout, /dev/stderr (을)를 실제로 서포트하고 있는 시스템에서의 gawk (으)로부터는, 그것들이 없는 시스템과는 다른 출력을 얻을 수 있을지도 모릅니다. gawk (은)는 그러한 파일을 내부에서 해석할 때에 표준 출력에의 출력을 /dev/stdout 에의 출력과 동기 시킵니다만, 그러한 파일을 가지는 시스템에서는 출력은 각각 다른 파일에 향할 수 있습니다. 이용자의 (분)편으로 조심하도록 해 주세요 (Caveat Emptor).

문법적으로 잘못한 단일 캐릭터 프로그램은 파스 스택을 흘러넘치게 하는 경향이 있어, 전혀 모르는 메세지를 생성하는 경향에 있습니다. 이러한 프로그램의 진단은 놀랄 만한 일로 일반적으로 어렵고, 진단의 노력은 완전히 무의미하게 됩니다.

버젼 정보
이 메뉴얼은 gawk 버젼 3.0. 6 에 대해 기재하고 있습니다.

저자
UNIX awk 의 최초의 버젼은, AT&T Bell Labs 의 Alfred Aho 와 Peter Weinberger 및 Brian Kernighan 에 의해 설계, 실장되었습니다. Brian Kernighan 는 그 메인트넌스와 개량을 계속하고 있습니다.

Free Software Foundation 의 Paul Rubin 와 Jay Fenlason 하지만, Seventh Edition UNIX 로 배포된 최초의 버젼의 awk (와)과 호환성을 가지도록(듯이) gawk (을)를 썼습니다. John Woods 는 수많은 버그 수정을 보내 주셨습니다. David Trueman 는, Arnold Robbins 가 보내 주신 내용을 기초로, gawk (을)를 신버젼의 UNIX awk 호환으로 했습니다.

DOS 에의 최초의 이식은 Conrad Kwok 와 Scott Garfinkle 에 의해 행해졌습니다. 현재는 Scott Deifik 가 DOS 판의 메인트넌스를 하고 있습니다. Pat Rankin 는 VMS 에의 이식을 행해, Michal Jaegermann 는 Atari ST 에의 이식을 행했습니다. OS/2 에의 이식은 Kai Uwe Rommel 가 Darrel Hankerson 의 도움을 받아 행했습니다. Fred Fish 가 Amiga 서포트의 제공을 실시했습니다.

버그 리포트
gawk 의 버그를 찾아내면(자), 전자 메일을 bug-gawk@gnu.org 앞에 보내 주세요. 전자 메일에는, operating system와 그 리버젼, gawk 의 리버젼, 컴파일에 사용한 C 컴파일러, 문제를 재현하는 것으로 올 뿐(만큼) 작은 테스트 프로그램과 데이터를 기술해 주세요.

버그 리포트를 보내기 전에 2 개를 가 주세요. 제 1 에, 최신의 gawk (을)를 사용되고 있는 것을 확인해 주세요. 많은 (통상 미묘한) 버그가 각각의 릴리스로 수정되고 있기 때문에, 사용하시는 것이 낡은 경우에는 문제는 이미 해결되고 있을지도 모릅니다. 제 2 에, 이 메뉴얼 페이지와 참조 설명서를 주의 깊게 읽어, 당신이 버그라고 생각하는 것이 확실히 버그이며, 크게 바뀐 언어 사양이 아닌 것을 확인해 주세요.

버그 리포트를 comp.lang.awk 에 투고하는 것만은 하지 말아 주세요. gawk 의 개발자들은 가끔 이 뉴스 그룹을 읽습니다만, 버그 리포트를 이 뉴스 그룹에 투고해도 버그 리포트로서 신뢰성이 없습니다. 상기의 주소에의 전자 메일로 부탁합니다.

사례
Bell Labs 의 Brian Kernighan 는 테스트 및 디버그의 사이, 귀중한 조력을 제공해 주셨습니다. 감사 합니다.

COPYING PERMISSIONS
Copyright © 1996-2000 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual page provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual page under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual page into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.