awk - 참조 설명서, 옵션, 명령 예제


이름

awk gawk - 패턴 스캐닝 및 처리 언어

개요

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

설명

Gawk는 GNU 프로젝트의 AWK 프로그래밍 언어 구현입니다. POSIX 1003.1 표준의 언어 정의를 따릅니다. 이 버전은 Aho, Kernighan 및 Weinberger가 작성한 The AWK Programming Language의 설명을 기반으로 합니다. Gawk는 Brian Kernighan의 awk 및 수많은 GNU 특정 확장의 현재 버전에 있는 추가 기능을 제공합니다.

명령줄은 gawk 자체에 대한 옵션, AWK 프로그램 텍스트(-f 또는 - -include 옵션을 통해 제공되지 않은 경우), ARGC 및 ARGV 사전 정의된 AWK 변수에서 사용할 수 있는 값입니다.

머리말

이 매뉴얼 페이지는 의도적으로 최대한 간결하게 작성되었습니다. 전체 세부 정보는 GAWK: 효과적인 AWK 프로그래밍에서 제공되며 특정 기능에 대한 전체 내용을 보려면 거기에서 살펴봐야 합니다. 가능한 경우 설명서의 온라인 버전에 대한 링크가 제공됩니다.

옵션 형식

Gawk 옵션은 전통적인 POSIX 스타일의 한 글자 옵션이거나 GNU 스타일의 긴 옵션일 수 있습니다. POSIX 옵션은 단일 "-"로 시작하고 긴 옵션은 "- -"로 시작합니다. GNU 특정 기능과 POSIX 필수 기능 모두에 대해 긴 옵션이 제공됩니다.

Gawk 특정 옵션은 일반적으로 긴 옵션 형식으로 사용됩니다. 긴 옵션에 대한 인수는 공백 없이 = 기호로 옵션과 연결되거나 다음 명령줄 인수에 제공될 수 있습니다. 긴 옵션은 약어가 고유한 경우 약어로 표시될 수 있습니다.

또한 모든 긴 옵션에는 해당하는 짧은 옵션이 있으므로 #! 실행 가능한 스크립트 내에서 옵션의 기능을 사용할 수 있습니다.

옵션

Gawk는 다음 옵션을 허용합니다. 표준 옵션이 먼저 나열되고 gawk 확장에 대한 옵션이 나열되고 짧은 옵션에 의해 알파벳순으로 나열됩니다.

-f program-file,

- -file program-file 첫 번째 명령줄 인수 대신 program-file 파일에서 AWK 프로그램 소스를 읽습니다. 여러 -f 옵션을 사용할 수 있습니다. -f로 읽은 파일은 묵시적인 @namespace "awk" 문으로 시작하는 것처럼 처리됩니다.

-F fs,

- -field-separator fs 입력 필드 구분 기호로 fs 사용(사전 정의된 FS 변수의 값) .

-v var = val, - -assign var = val

프로그램 실행이 시작되기 전에 값 val을 변수 var에 할당합니다. 이러한 변수 값은 AWK 프로그램의 BEGIN 규칙에 사용할 수 있습니다.

-b,

- -characters-as-bytes 모든 입력 데이터를 싱글바이트 문자로 처리합니다. - -posix 옵션은 이 옵션보다 우선합니다.

-c,

- -traditional 호환성 모드에서 실행합니다. 호환성 모드에서 gawk는 Brian Kernighan의 awk와 동일하게 동작합니다. GNU 특정 확장은 인식되지 않습니다.

-C,

- -copyright GNU 저작권 정보 메시지의 짧은 버전을 표준 출력에 인쇄하고 성공적으로 종료합니다.

-d[file], - -dump-variables[=file]

정렬된 전역 변수 목록, 해당 유형 및 최종 값을 파일에 인쇄합니다. 기본 파일은 현재 디렉토리의 awkvars.out입니다.

-D[file], - -debug[=file]

AWK 프로그램의 디버깅을 활성화합니다. 기본적으로 디버거는 키보드(표준 입력)에서 대화형으로 명령을 읽습니다. 선택적 file 인수는 디버거가 비대화식으로 실행할 명령 목록이 있는 파일을 지정합니다.

이 실행 모드에서 gawk는 AWK 소스 코드를 로드한 다음 디버깅 명령을 묻는 메시지를 표시합니다. Gawk는 -f 및 - -include 옵션과 함께 제공된 AWK 프로그램 소스만 디버깅할 수 있습니다. 디버거는 GAWK: Effective AWK Programming에 문서화되어 있습니다. https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger를 참조하세요.

-e program-text,

- -source program-text program-text를 AWK 프로그램 소스 코드로 사용합니다. -e를 통해 제공된 각 인수는 암시적 @namespace "awk" 문으로 시작하는 것처럼 처리됩니다.

-E file, - -exec file

-f와 유사하지만 이 옵션이 마지막으로 처리됩니다. 이것은 특히 CGI 응용 프로그램의 경우 #! 스크립트와 함께 사용하여 URL의 명령줄에 옵션이나 소스 코드(!)를 전달하지 않도록 해야 합니다. 이 옵션은 명령줄 변수 할당을 비활성화합니다.

-g,

- -gen-pot AWK 프로그램을 스캔 및 구문 분석하고 표준 출력에서 GNU .pot(Portable Object Template) 형식 파일을 생성합니다. 프로그램. 프로그램 자체는 실행되지 않습니다.

-h,

- -help 표준 출력에 사용 가능한 옵션에 대한 비교적 짧은 요약을 인쇄합니다. GNU 코딩 표준에 따라 이러한 옵션은 즉각적이고 성공적으로 종료됩니다.

-i include-file, - -include include-file

awk 소스 라이브러리를 로드합니다. AWKPATH 환경 변수를 사용하여 라이브러리를 검색합니다. 초기 검색이 실패하면 .awk 접미사를 추가한 후 다시 시도합니다. 파일은 한 번만 로드되며(즉, 중복이 제거됨) 코드는 기본 프로그램 소스를 구성하지 않습니다. - -include로 읽은 파일은 암시적 @namespace "awk" 문으로 시작하는 것처럼 처리됩니다.

-I,

- -trace 프로그램을 실행할 때 실행되는 내부 바이트 코드 이름을 인쇄합니다. 추적은 표준 오류로 인쇄됩니다. 출력에서 각 ``op 코드'' 앞에는 + 기호가 있습니다.

-l lib,

- -load lib 공유 라이브러리 lib에서 gawk 확장을 로드합니다. AWKLIBPATH 환경 변수를 사용하여 라이브러리를 검색합니다. 초기 검색이 실패하면 플랫폼의 기본 공유 라이브러리 접미사를 추가한 후 다시 시도합니다. 라이브러리 초기화 루틴의 이름은 dl_load()로 지정되어야 합니다.

-L [value], - -lint[=value]

의심스럽거나 다른 AWK 구현으로 이식할 수 없는 구성에 대한 경고를 제공합니다. value에 가능한 값 목록은 https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options를 참조하세요.

-M,

- -bignum 숫자에 대해 임의의 정밀 산술을 강제합니다. 이 옵션은 gawk가 GNU MPFR 및 GMP 라이브러리를 사용하도록 컴파일되지 않은 경우 효과가 없습니다. (이 경우 gawk는 경고를 발행합니다.)

참고: 이 기능은 임시입니다. 기본 gawk 관리자는 더 이상 지원하지 않지만 개발 팀 구성원이 있습니다. 이 상황이 바뀌면 해당 기능이 gawk에서 제거됩니다.

환경에서 GAWK_NO_MPFR_WARN을 설정하여 경고를 음소거합니다.

-n,

- -non-decimal-data 입력 데이터에서 8진수 및 16진수 값을 인식합니다. 이 옵션은 매우 주의해서 사용하세요!

-N,

- -use-lc-numeric gawk가 입력 데이터를 구문 분석할 때 로케일의 소수점 문자를 사용하도록 합니다.

-W nostalgia,

- -nostalgia 오랜 awk 사용자에게 향수의 순간을 제공합니다.

-o[file], - -pretty-print[=file]

프로그램의 예쁘게 인쇄된 버전을 파일에 출력합니다. 기본 파일은 현재 디렉토리의 awkprof.out입니다. 이 옵션은 - -no-optimize를 의미합니다.

-O,

- -optimize 프로그램의 내부 표현에 따라 gawk의 기본 최적화를 활성화합니다. 이 옵션은 기본적으로 켜져 있습니다.

-p[prof-file], - -profile[=prof-file]

프로파일링 세션을 시작하고 프로파일링 데이터를 prof-file으로 보냅니다. 기본값은 현재 디렉토리의 awkprof.out입니다. 프로필에는 왼쪽 여백에 있는 프로그램의 각 명령문 실행 횟수와 각 사용자 정의 함수에 대한 함수 호출 횟수가 포함됩니다. Gawk는 이 모드에서 더 느리게 실행됩니다. 이 옵션은 - -no-optimize를 의미합니다.

-P,

- -posix 이것은 호환성 모드를 켜고 여러 일반 확장을 비활성화합니다.

-r,

- -re-interval 정규식 일치에서 간격식 사용을 활성화합니다. 간격 표현식은 기본적으로 활성화되지만 이 옵션은 이전 버전과의 호환성을 위해 유지됩니다.

-s,

- -no-optimize 프로그램의 내부 표시 시 gawk의 기본 최적화를 비활성화합니다.

-S,

- -sandbox 샌드박스 모드에서 gawk 실행, system() 기능 비활성화, getline으로 입력 리디렉션, 출력 print 및 printf로 리디렉션하고 동적 확장 프로그램을 로드합니다. 명령 실행(파이프라인을 통한)도 비활성화됩니다.

-t,

- -lint-old 원래 버전의 UNIX awk로 이식할 수 없는 구문에 대한 경고를 제공합니다.

-V,

- -version 이 특정 gawk 사본에 대한 버전 정보를 표준 출력에 인쇄합니다. 이것은 버그를 보고할 때 유용합니다. GNU 코딩 표준에 따라 이러한 옵션은 즉각적이고 성공적으로 종료됩니다.

- -

옵션의 끝을 알립니다. 이것은 "-"로 시작하는 AWK 프로그램 자체에 대한 추가 인수를 허용하는 데 유용합니다.

호환 모드에서 다른 모든 옵션은 유효하지 않은 것으로 표시되지만 그렇지 않으면 무시됩니다. 정상적인 작동에서 프로그램 텍스트가 제공되는 한 알 수 없는 옵션은 처리를 위해 ARGV 배열의 AWK 프로그램에 전달됩니다.

POSIX 호환성을 위해 -W 옵션을 사용하고 그 뒤에 긴 옵션 이름을 사용할 수 있습니다.

AWK 프로그램 실행

AWK 프로그램은 일련의 선택적 지시문, 패턴 동작 문 및 선택적 함수 정의로 구성됩니다.

@include "filename "
@load "filename "
@namespace "name "
pattern { action statements }
function name(parameter list) { statements }

Gawk는 먼저 프로그램 파일(지정된 경우), - -source에 대한 인수 또는 첫 번째가 아닌 프로그램 소스에서 프로그램 소스를 읽습니다. 명령줄의 -option 인수. -f 및 - -source 옵션은 명령줄에서 여러 번 사용할 수 있습니다. Gawk는 모든 프로그램 파일과 명령줄 소스 텍스트가 함께 연결된 것처럼 프로그램 텍스트를 읽습니다.

또한 @include로 시작하는 줄을 사용하여 다른 소스 파일을 프로그램에 포함할 수 있습니다. 이것은 - -include 옵션을 사용하는 것과 같습니다.

@load로 시작하는 줄은 프로그램에 확장 기능을 로드하는 데 사용할 수 있습니다. 이것은 - -load 옵션을 사용하는 것과 같습니다.

환경 변수 AWKPATH는 -f 및 - -include 옵션으로 명명된 소스 파일을 찾을 때 사용할 검색 경로를 지정합니다. 이 변수가 존재하지 않는 경우 기본 경로는 ".:/usr/local/share/awk"입니다. (실제 디렉토리는 gawk 빌드 및 설치 방법에 따라 다를 수 있습니다.) -f 옵션에 지정된 파일 이름에 "/" 문자가 포함된 경우 경로가 없습니다. 검색이 수행됩니다.

환경 변수 AWKLIBPATH는 - -load 옵션으로 명명된 소스 파일을 찾을 때 사용할 검색 경로를 지정합니다. 이 변수가 존재하지 않는 경우 기본 경로는 "/usr/local/lib/gawk"입니다. (실제 디렉토리는 gawk 빌드 및 설치 방법에 따라 다를 수 있습니다.)

Gawk는 다음 순서로 AWK 프로그램을 실행합니다. 먼저 -v 옵션을 통해 지정된 모든 변수 할당이 수행됩니다. 다음으로 gawk는 프로그램을 내부 형식으로 컴파일합니다. 그런 다음 gawk는 BEGIN 규칙(있는 경우)의 코드를 실행한 다음 ARGV에 이름이 지정된 각 파일을 계속 읽습니다. 배열(최대 ARGV[ARGC-1]). 명령줄에 이름이 지정된 파일이 없으면 gawk는 표준 입력을 읽습니다.

명령줄의 파일 이름이 var=val 형식이면 변수 할당으로 처리됩니다. 변수 var에는 값 val이 할당됩니다. (이는 BEGIN 규칙이 실행된 후에 발생합니다.)

ARGV의 특정 요소 값이 비어 있으면("") gawk는 이를 건너뜁니다.

각 입력 파일에 대해 BEGINFILE 규칙이 존재하는 경우 gawk는 파일 내용을 처리하기 전에 관련 코드를 실행합니다. 마찬가지로 gawk는 파일을 처리한 후 ENDFILE 규칙과 관련된 코드를 실행합니다.

입력의 각 레코드에 대해 gawk는 AWK 프로그램의 패턴과 일치하는지 테스트합니다. 레코드가 일치하는 각 패턴에 대해 gawk는 연관된 액션을 실행합니다. 패턴은 프로그램에서 발생하는 순서대로 테스트됩니다.

마지막으로 모든 입력이 소진된 후 gawk는 END 규칙(있는 경우)의 코드를 실행합니다.

명령줄 디렉터리

POSIX에 따르면 awk 명령줄에 이름이 지정된 파일은 텍스트 파일이어야 합니다. 그렇지 않은 경우 동작은 ``정의되지 않음''입니다. 대부분의 awk 버전은 명령줄의 디렉토리를 치명적인 오류로 취급합니다.

gawk의 경우 명령줄의 디렉토리가 경고를 생성하지만 그렇지 않으면 건너뜁니다. - -posix 또는 - -traditional 옵션 중 하나가 제공되면 gawk는 명령줄의 디렉토리를 치명적 오류로 처리하는 것으로 되돌아갑니다. .

변수, 레코드 및 필드

AWK 변수는 동적입니다. 그들은 처음 사용될 때 존재합니다. 값은 사용 방법에 따라 부동 소수점 숫자 또는 문자열이거나 둘 다입니다. 또한 gawk는 변수가 정규식 유형을 갖도록 허용합니다. AWK에는 1차원 배열도 있습니다. 여러 차원의 배열을 시뮬레이션할 수 있습니다. 그러나 gawk는 진정한 배열 배열을 제공합니다. 프로그램이 실행될 때 미리 정의된 여러 변수가 설정됩니다. 이들은 필요에 따라 설명되고 아래에 요약되어 있습니다.

기록

일반적으로 레코드는 개행 문자로 구분됩니다. 기본 제공 변수 RS에 값을 할당하여 레코드를 구분하는 방법을 제어할 수 있습니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Records.html을 참조하세요.

필드

각 입력 레코드를 읽을 때 gawk는 FS 변수 값을 필드 구분 기호로 사용하여 레코드를 필드로 분할합니다. 또한 FIELDWIDTHS 및 FPAT을 사용하여 입력 필드 분할을 제어할 수 있습니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Fields.html에서 확인하세요.

입력 레코드의 각 필드는 위치($1, $2 등)로 참조할 수 있습니다. $0은 선행 및 후행 공백을 포함한 전체 레코드입니다.

변수 NF는 입력 레코드의 총 필드 수로 설정됩니다.

존재하지 않는 필드(즉, $NF 뒤의 필드)에 대한 참조는 null 문자열을 생성합니다. 그러나 존재하지 않는 필드(예: $ (NF+2)=5)에 할당하면 NF 값이 증가하고 null 문자열을 값으로 사용하고 $0 값이 OFS 값으로 구분되는 필드와 함께 다시 계산되도록 합니다. 음수 필드를 참조하면 치명적인 오류가 발생합니다. NF를 줄이면 새 값을 초과하는 필드 값이 손실되고 $0 값이 값으로 구분된 필드로 다시 계산됩니다. OFS.

기존 필드에 값을 할당하면 $0이 참조될 때 전체 레코드가 다시 작성됩니다. 마찬가지로 $0에 값을 할당하면 레코드가 다시 분할되어 필드에 대한 새 값이 생성됩니다.

내장 변수

Gawk 의 내장 변수는 다음과 같습니다. 이 목록은 의도적으로 간결합니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables를 참조하세요.

ARGC

명령줄 인수의 수입니다.

ARGIND

처리 중인 현재 파일의 ARGV 인덱스입니다.

ARGV

명령줄 인수의 배열입니다. 배열은 0부터 ARGC - 1까지 인덱싱됩니다.

BINMODE

비 POSIX 시스템에서 모든 파일 I/O에 대해 "바이너리" 모드 사용을 지정합니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html을 참조하세요.

CONVFMT

기본적으로 숫자의 변환 형식인 "%.6g"입니다.

ENVIRON

현재 환경의 값을 포함하는 배열입니다. 배열은 환경 변수에 의해 인덱싱되며 각 요소는 해당 변수의 값입니다.

ERRNO

getline에 대한 리디렉션을 수행하거나 getline을 읽는 동안 또는 close() 중에 시스템 오류가 발생하면 ERRNO는 오류를 설명하는 문자열로 설정됩니다. 이 값은 영어가 아닌 로케일로 번역될 수 있습니다.

FIELDWIDTHS

공백으로 구분된 필드 너비 목록입니다. 설정되면 gawk는 FS 변수 값을 필드 구분자로 사용하는 대신 입력을 고정 너비 필드로 구문 분석합니다. 각 필드 너비는 선택적으로 필드가 시작되기 전에 건너뛸 문자 수를 지정하는 콜론으로 구분된 값이 앞에 올 수 있습니다.

FILENAME

현재 입력 파일의 이름입니다. 명령줄에 파일이 지정되지 않은 경우 FILENAME의 값은 "-"입니다. 그러나 FILENAME은 BEGIN 규칙 내에서 정의되지 않습니다(getline에 의해 설정되지 않은 경우).

FNR

현재 입력 파일의 입력 레코드 번호입니다.

FPAT

레코드의 필드 내용을 설명하는 정규식입니다. 설정되면 gawk는 FS 값을 필드 구분 기호로 사용하는 대신 필드가 정규 표현식과 일치하는 필드로 입력을 구문 분석합니다.

FS

기본적으로 공백인 입력 필드 구분 기호입니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html을 참조하세요.

FUNCTAB

인덱스와 해당 값이 프로그램의 모든 사용자 정의 또는 확장 함수의 이름인 배열입니다. 참고: FUNCTAB 배열과 함께 delete 문을 사용할 수 없습니다.

IGNORECASE

모든 정규식 및 문자열 연산의 대소문자 구분을 제어합니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html을 참조하세요.

LINT

AWK 프로그램 내에서 - -lint 옵션의 동적 제어를 제공합니다.

NF

현재 입력 레코드의 필드 수입니다.

NR

지금까지 본 입력 레코드의 총 수입니다.

OFMT

숫자의 출력 형식은 기본적으로 "%.6g"입니다.

OFS

출력 필드 구분 기호는 기본적으로 공백입니다.

ORS

출력 레코드 구분 기호는 기본적으로 개행입니다.

PREC

임의 정밀도 부동 소수점 숫자의 작동 정밀도로, 기본적으로 53입니다.

PROCINFO

이 배열의 요소는 실행 중인 AWK 프로그램에 대한 정보에 대한 액세스를 제공합니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset을 참조하세요.

ROUNDMODE

숫자에 대한 임의 정밀도 산술에 사용할 반올림 모드, 기본적으로 "N"(IEEE-754 roundTiesToEven 모드). 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode를 참조하세요.

RS

입력 레코드 구분 기호는 기본적으로 개행입니다.

RT

레코드 종결자. Gawk는 RT를 RS에 의해 지정된 문자 또는 정규 표현식과 일치하는 입력 텍스트로 설정합니다.

RSTART

match()와 일치하는 첫 번째 문자의 인덱스입니다. 일치하지 않는 경우 0입니다.

RLENGTH

match()와 일치하는 문자열의 길이입니다. 일치하는 항목이 없으면 -1입니다.

SUBSEP

기본적으로 "\034" 배열 요소에서 여러 첨자를 구분하는 데 사용되는 문자열입니다.

SYMTAB

인덱스가 프로그램에서 현재 정의된 모든 전역 변수 및 배열의 이름인 배열입니다. SYMTAB 배열과 함께 delete 문을 사용하거나 변수 이름이 아닌 색인이 있는 요소에 할당할 수 없습니다.

TEXTDOMAIN

AWK 프로그램의 텍스트 도메인. 프로그램의 문자열에 대한 현지화된 번역을 찾는 데 사용됩니다.

배열

배열은 대괄호([ 및 ]) 사이에 표현식으로 아래 첨자로 표시됩니다. 표현식이 표현식 목록(expr, expr . . .)인 경우 배열 첨자는 각 표현식의 (문자열) 값의 연결로 구성된 문자열입니다. SUBSEP 변수의 값으로 구분됩니다. 이 기능은 다중 차원 배열을 시뮬레이트하는 데 사용됩니다. 예를 들어:

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

문자열 "hello, world\n"을 "A\034B\034C" 문자열로 인덱싱되는 배열 x의 요소에 할당합니다. >. AWK의 모든 배열은 연관되어 있습니다. 즉, 문자열 값으로 인덱싱됩니다.

특수 연산자 in은 배열에 특정 값으로 구성된 인덱스가 있는지 테스트하는 데 사용할 수 있습니다.

if (val in array)
	print array[val]

배열에 여러 개의 첨자가 있는 경우 (i, j) in array를 사용합니다.

in 구조는 for 루프에서 배열의 모든 요소를 반복하는 데 사용할 수도 있습니다. 그러나 (i, j) in array 구조는 for 루프가 아닌 테스트에서만 작동합니다.

delete 문을 사용하여 배열에서 요소를 삭제할 수 있습니다. delete 문은 첨자 없이 배열 이름을 지정하기만 하면 배열의 전체 내용을 삭제하는 데 사용할 수도 있습니다.

gawk는 진정한 다차원 배열을 지원합니다. 이러한 배열은 C나 C++에서와 같이 "직사각형"일 필요가 없습니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Arrays를 참조하세요.

네임스페이스

Gawk는 AWK의 모든 변수가 전역이라는 사실을 해결하는 데 도움이 되는 간단한 네임스페이스 기능을 제공합니다.

정식 이름은 이중 콜론(::)으로 연결된 두 개의 간단한 식별자로 구성됩니다. 왼쪽 식별자는 네임스페이스를 나타내고 오른쪽 식별자는 그 안에 있는 변수입니다. 모든 단순(비정규) 이름은 ``현재'' 네임스페이스에 있는 것으로 간주됩니다. 기본 네임스페이스는 awk입니다. 그러나 대문자로만 구성된 간단한 식별자는 현재 네임스페이스가 다르더라도 awk 네임스페이스에 강제로 삽입됩니다.

@namespace "name " 지시문을 사용하여 현재 네임스페이스를 변경합니다.

미리 정의된 표준 내장 함수 이름은 네임스페이스 이름으로 사용할 수 없습니다. gawk에서 제공하는 추가 기능의 이름은 네임스페이스 이름으로 사용하거나 다른 네임스페이스에서 간단한 식별자로 사용할 수 있습니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces를 참조하세요.

변수 유형 지정 및 변환

변수와 필드는 (부동 소수점) 숫자나 문자열 또는 둘 다일 수 있습니다. 정규식일 수도 있습니다. 변수 값이 해석되는 방식은 해당 컨텍스트에 따라 다릅니다. 숫자 식에 사용되는 경우 숫자로 처리됩니다. 문자열로 사용되는 경우 문자열로 처리됩니다.

변수를 숫자로 처리하려면 변수에 0을 추가하십시오. 강제로 문자열로 처리하려면 널 문자열과 연결하십시오.

초기화되지 않은 변수에는 숫자 값 0과 문자열 값 ""(널 또는 빈 문자열)이 있습니다.

문자열을 숫자로 변환해야 하는 경우 strtod(3)를 사용하여 변환이 수행됩니다. 숫자는 sprintf(3)의 형식 문자열로 CONVFMT 값을 사용하고 변수의 숫자 값을 인수로 사용하여 문자열로 변환됩니다. 그러나 AWK의 모든 숫자가 부동 소수점이지만 정수 값은 항상 정수로 변환됩니다.

Gawk는 다음과 같이 비교를 수행합니다. 두 변수가 숫자이면 숫자로 비교됩니다. 한 값이 숫자이고 다른 값이 "숫자 문자열"인 문자열 값을 갖는 경우 비교도 숫자로 수행됩니다. 그렇지 않으면 숫자 값이 문자열로 변환되고 문자열 비교가 수행됩니다. 두 문자열은 물론 문자열로 비교됩니다.

"57"과 같은 문자열 상수는 숫자 문자열이 아닌 문자열 상수입니다. "숫자 문자열" 개념은 필드, getline 입력, FILENAME, ARGV 요소, ENVIRON 요소에만 적용됩니다. split() 또는 patsplit()에 의해 생성된 배열 요소는 숫자 문자열입니다. 기본 아이디어는 사용자 입력과 숫자로 보이는 사용자 입력만 그런 식으로 처리되어야 한다는 것입니다.

8진수 및 16진수 상수

AWK 프로그램 소스 코드에서 C 스타일의 8진수 및 16진수 상수를 사용할 수 있습니다. 예를 들어 8진수 값 011은 10진수 9와 같고 16진수 값 0x11은 10진수 17과 같습니다.

문자열 상수

AWK의 문자열 상수는 큰따옴표로 묶인 일련의 문자입니다(예: "value"). 문자열 내에서 C에서와 같이 특정 이스케이프 시퀀스가 인식됩니다. 세부 사항.

정규식 상수

정규식 상수는 슬래시(/value/와 같은)로 묶인 일련의 문자입니다.

설명서에 설명된 이스케이프 시퀀스는 상수 정규식 내에서도 사용할 수 있습니다(예: /[ \t\f\n\r\v]/는 공백 문자와 일치).

Gawk는 강력한 유형의 정규 표현식 상수를 제공합니다. 이들은 선행 @ 기호로 작성됩니다(예: @/value/). 이러한 상수는 스칼라(변수, 배열 요소)에 할당되고 사용자 정의 함수에 전달될 수 있습니다. 이렇게 할당된 변수는 정규식 유형을 갖습니다.

패턴과 조치

AWK는 라인 지향 언어입니다. 패턴이 먼저 나온 다음 행동이 나옵니다. 작업 문은 { 및 }로 묶여 있습니다. 패턴이 누락되었거나 작업이 누락되었을 수 있지만 물론 둘 다는 아닙니다. 패턴이 누락된 경우 모든 단일 입력 레코드에 대해 작업이 실행됩니다. 누락된 작업은 다음과 같습니다.

{ print }

전체 레코드를 인쇄합니다.

주석은 # 문자로 시작하여 줄 끝까지 계속됩니다. 문을 구분하기 위해 빈 줄을 사용할 수 있습니다. 일반적으로 명령문은 개행 문자로 끝나지만 쉼표({, ?, :, && 또는 ||. do 또는 else로 끝나는 줄도 다음 줄에서 자동으로 문장이 계속됩니다. 다른 경우에는 “\ ”로 끝나서 줄을 계속할 수 있으며, 이 경우 새 줄은 무시됩니다. 그러나 # 뒤의 "\ "는 특별하지 않습니다.

여러 문을 ";"로 구분하여 한 줄에 넣을 수 있습니다. ". 이것은 패턴-액션 쌍(일반적인 경우)의 액션 부분 내의 명령문과 패턴-액션 명령문 자체에 모두 적용됩니다.

패턴

AWK 패턴은 다음 중 하나일 수 있습니다.

BEGIN
END
BEGINFILE
ENDFILE
/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 패턴에는 누락된 작업 부분이 있을 수 없습니다.

BEGINFILE 및 ENDFILE은 각 명령줄 입력 파일의 첫 번째 레코드를 읽기 전과 각 파일의 마지막 레코드를 읽은 후에 작업이 실행되는 추가 특수 패턴입니다. BEGINFILE 규칙 내에서 파일이 성공적으로 열린 경우 ERRNO 값은 빈 문자열입니다. 그렇지 않으면 파일에 문제가 있는 것이므로 코드에서 nextfile을 사용하여 건너뛰어야 합니다. 그렇게 하지 않으면 gawk는 열 수 없는 파일에 대해 일반적인 치명적인 오류를 생성합니다.

/정규식/ 패턴의 경우 정규식과 일치하는 각 입력 레코드에 대해 연결된 명령문이 실행됩니다. 정규 표현식은 기본적으로 egrep(1)의 정규 표현식과 동일합니다. 정규식에 대한 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Regexp.html을 참조하세요.

관계식은 작업 섹션에서 아래 정의된 연산자를 사용할 수 있습니다. 이들은 일반적으로 특정 필드가 특정 정규식과 일치하는지 여부를 테스트합니다.

&&, || 및 ! 연산자는 C에서와 같이 각각 논리적 AND, 논리적 OR 및 논리적 NOT입니다. -회로 평가, C에서와 마찬가지로 더 원시적인 패턴 표현을 결합하는 데 사용됩니다. 대부분의 언어에서처럼 괄호를 사용하여 평가 순서를 변경할 수 있습니다.

<강>? : 연산자는 C의 동일한 연산자와 같습니다. 첫 번째 패턴이 참이면 테스트에 사용되는 패턴이 두 번째 패턴이고, 그렇지 않으면 세 번째 패턴입니다. 두 번째 및 세 번째 패턴 중 하나만 평가됩니다.

식의 pattern1, pattern2 형식을 범위 패턴이라고 합니다. pattern1과 일치하는 레코드로 시작하여 pattern2와 일치하는 레코드까지 계속되는 모든 입력 레코드와 일치합니다. 다른 종류의 패턴 표현과 결합하지 않습니다.

행위

작업 문은 중괄호 { 및 }로 묶습니다. 액션 문은 대부분의 언어에서 볼 수 있는 일반적인 할당문, 조건문 및 반복 문으로 구성됩니다. 사용 가능한 연산자, 제어문 및 입력/출력문은 C의 패턴을 따라 패턴화됩니다.

연산자

AWK의 연산자는 내림차순으로 다음과 같습니다.

(. . .)

그룹화

$

필드 참조.

++ - -

증가 및 감소, 접두사 및 접미사.

^

지수.

+ - !

단항 더하기, 단항 빼기 및 논리 부정.

* / %

곱셈, 나눗셈, 모듈러스.

+ -

덧셈과 뺄셈.

space

문자열 연결.

| |&

getline, print 및 printf에 대한 파이프 I/O.

< > <= >= == !=

정규 관계 연산자.

~ !~

정규 표현식 일치, 부정 일치.

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 }
switch (expression) {
case value|regex : statement
. . .
[ default: statement ]
}

I/O 문

입력/출력 문은 다음과 같습니다.

close(file [, how])

열려 있는 파일, 파이프 또는 공동 프로세스를 닫습니다. 선택적 how는 coprocess에 대한 양방향 파이프의 한쪽 끝을 닫을 때만 사용해야 합니다. "to" 또는 "from" 문자열 값이어야 합니다.

getline

다음 입력 레코드에서 $0을(를) 설정합니다. NF, NR, FNR, RT를 설정합니다.

getline <file

파일의 다음 레코드에서 $0을(를) 설정합니다. NF, RT를 설정합니다.

getline var

다음 입력 레코드에서 var를 설정합니다. NR, FNR, RT를 설정합니다.

getline var <file

file의 다음 레코드에서 var를 설정합니다. RT를 설정합니다.

command | getline [var]

command를 실행하여 출력을 위와 같이 $0 또는 var 및 RT로 파이핑합니다.

command |& getline [var]

위와 같이 출력을 $0 또는 var 및 RT로 파이핑하는 공동 프로세스로 command를 실행합니다. (명령은 소켓일 수도 있습니다. 아래의 특수 파일 이름 하위 섹션을 참조하십시오.)

fflush([file ])

열린 출력 파일 또는 파이프 파일과 관련된 모든 버퍼를 플러시합니다. file이 누락되었거나 null 문자열인 경우 열려 있는 모든 출력 파일과 파이프를 플러시합니다.

next

현재 입력 레코드 처리를 중지합니다. 다음 입력 레코드를 읽고 AWK 프로그램의 첫 번째 패턴으로 처리를 시작합니다. 입력 데이터의 끝에 도달하면 모든 END 규칙을 실행합니다.

nextfile

현재 입력 파일 처리를 중지합니다. 다음 입력 레코드 읽기는 다음 입력 파일에서 가져옵니다. FILENAME 및 ARGIND를 업데이트하고 FNR을 1로 재설정한 다음 AWK 프로그램의 첫 번째 패턴으로 처리를 시작합니다. 입력 데이터의 끝에 도달하면 ENDFILE 및 END 규칙을 실행합니다.

print

현재 레코드를 인쇄합니다. 출력 레코드는 ORS 값으로 종료됩니다.

print expr-list

표현식을 인쇄합니다. 각 표현식은 OFS 값으로 구분됩니다. 출력 레코드는 ORS 값으로 종료됩니다.

print expr-list >file

파일에 식을 인쇄합니다. 각 표현식은 OFS 값으로 구분됩니다. 출력 레코드는 ORS 값으로 종료됩니다.

printf fmt, expr-list

형식을 지정하고 인쇄하십시오.

printf fmt, expr-list >file

파일에 서식을 지정하고 인쇄합니다.

system(cmd-line)

cmd-line 명령을 실행하고 종료 상태를 반환합니다. (비 POSIX 시스템에서는 사용하지 못할 수 있습니다.) 종료 상태에 대한 자세한 내용.

print 및 printf에 대해 추가 출력 리디렉션이 허용됩니다.

print . . . >> file

출력을 파일에 추가합니다.

print . . . | command

파이프에 씁니다.

print . . . |& command

데이터를 보조 프로세스 또는 소켓으로 보냅니다. (아래의 특수 파일 이름 하위 섹션도 참조하십시오.)

getline 명령은 성공 시 1, 파일 끝 시 0, 오류 시 -1을 반환합니다. errno(3) 값이 I/O 작업을 재시도할 수 있음을 나타내고 PROCINFO["input ", " RETRY"]가 설정되면 -1 대신 -2가 반환되고 getline에 대한 추가 호출이 시도될 수 있습니다. 오류가 발생하면 ERRNO가 문제를 설명하는 문자열로 설정됩니다.

참고: 양방향 소켓을 여는 데 실패하면 치명적이지 않은 오류가 호출 함수로 반환됩니다. 루프 내에서 getline 또는 print 또는 printf에서 파이프, 공동 프로세스 또는 소켓을 사용하는 경우 반드시 close()를 사용하여 명령 또는 소켓의 새 인스턴스를 만듭니다. AWK는 EOF를 반환할 때 파이프, 소켓 또는 보조 프로세스를 자동으로 닫지 않습니다.

printf 문 및 sprintf() 함수의 AWK 버전은 C의 버전과 유사합니다. 자세한 내용은 https://www.gnu.org/를 참조하세요. 소프트웨어/gawk/manual/html_node/Printf.html.

특수 파일 이름

print 또는 printf에서 파일로 또는 파일에서 getline을 통해 I/O 리디렉션을 수행할 때 gawk 내부적으로 특정 특수 파일 이름을 인식합니다. 이러한 파일 이름은 gawk 의 상위 프로세스(일반적으로 셸)에서 상속된 열린 파일 설명자에 대한 액세스를 허용합니다. 이러한 파일 이름은 명령줄에서 데이터 파일의 이름을 지정하는 데 사용될 수도 있습니다. 파일 이름은 다음과 같습니다.

-

표준 입력.

/dev/stdin

표준 입력.

/dev/stdout

표준 출력.

/dev/stderr

표준 오류 출력.

/dev/fd/ n

열린 파일 설명자 n과 관련된 파일입니다.

다음 특수 파일 이름은 TCP/IP 네트워크 연결을 만들기 위해 |& 보조 프로세스 연산자와 함께 사용할 수 있습니다.

/inet/tcp/lport/rhost/rport
/inet4/tcp/lport/rhost/rport
/inet6/tcp/lport/rhost/rport

원격 포트 rport의 원격 호스트 rhost에 대한 로컬 포트 lport의 TCP/IP 연결을 위한 파일. 0 포트를 사용하여 시스템이 포트를 선택하도록 합니다. IPv4 연결을 강제하려면 /inet4를 사용하고 IPv6 연결을 강제하려면 /inet6을 사용하십시오. 일반 /inet은 시스템 기본값(대부분 IPv4)을 사용합니다. |& 양방향 I/O 연산자와 함께만 사용할 수 있습니다.

/inet/udp/lport/rhost/rport
/inet4/udp/lport/rhost/rport
/inet6/udp/lport/rhost/rport

유사하지만 TCP/IP 대신 UDP/IP를 사용합니다.

숫자 함수

AWK에는 다음과 같은 내장 산술 함수가 있습니다.

atan2(y, x)

y/x의 아크탄젠트를 라디안 단위로 반환합니다.

cos(expr)

라디안 단위인 expr의 코사인을 반환합니다.

exp(expr)

지수함수.

int(expr)

정수로 자릅니다.

intdiv(num, denom, result)

num 및 denom을 정수로 자릅니다. 결과["quotient"]에서 denom으로 나눈 num의 몫과 의 나머지를 반환합니다. 결과["나머지"]. 이것은 gawk 확장으로, 임의로 큰 정수로 작업할 때 주로 유용합니다.

log(expr)

자연 로그 함수.

rand()

0 ≤ N < 1인 0과 1 사이의 난수 N을 반환합니다.

sin(expr)

라디안 단위인 expr의 사인을 반환합니다.

sqrt(expr)

expr의 제곱근을 반환합니다.

srand([expr ])

난수 생성기의 새 시드로 expr을 사용합니다. expr이 제공되지 않으면 시간을 사용하십시오. 난수 생성기의 이전 시드를 반환합니다.

문자열 함수

Gawk에는 다음과 같은 내장 문자열 함수가 있습니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/String-Functions에서 제공됩니다.

asort(s [, d [, how] ])

소스 배열 s의 요소 수를 반환합니다. 값을 비교하기 위한 gawk 의 일반 규칙을 사용하여 s의 내용을 정렬하고 정렬된 값 s의 인덱스를 다음으로 시작하는 순차적인 정수로 바꿉니다. 1. 선택적 대상 배열 d가 지정된 경우 먼저 s를 d에 복제한 다음 d를 정렬합니다. 소스 배열 s의 인덱스는 변경되지 않은 채로 둡니다. 선택적 문자열 how는 방향과 비교 모드를 제어합니다. 방법에 대한 유효한 값은 https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions에 설명되어 있습니다. s와 d는 같은 배열이 될 수 있습니다. 이것은 세 번째 인수를 제공할 때만 의미가 있습니다.

asorti(s [, d [, how] ])

소스 배열 s의 요소 수를 반환합니다. 동작은 배열 값이 아닌 배열 인덱스가 정렬에 사용된다는 점을 제외하면 asort()의 동작과 동일합니다. 완료되면 배열이 숫자로 인덱싱되고 값은 원래 인덱스의 값입니다. 원래 값이 손실됩니다. 따라서 원본을 보존하려면 두 번째 배열을 제공하십시오. 선택적 문자열 how의 목적은 asort()와 동일합니다. 여기서도 s와 d는 같은 배열이 될 수 있습니다. 이것은 세 번째 인수를 제공할 때만 의미가 있습니다.

gensub(r, s, h [, t])

정규 표현식 r과 일치하는 대상 문자열 t을 검색합니다. 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을 사용합니다. 대체 텍스트의 &는 실제로 일치한 텍스트로 대체됩니다. \&을(를) 사용하여 리터럴 &을 가져옵니다. ("\\&"로 입력해야 합니다. https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details 참조 sub(), gsub() 및 gensub()<의 대체 텍스트에서 앰퍼샌드 및 백슬래시 규칙에 대해 자세히 설명합니다. /강하다>.)

index(s, t)

문자열 s에서 문자열 t의 인덱스를 반환하거나 t가 없으면 0을 반환합니다. (이는 문자 인덱스가 1부터 시작함을 의미합니다.)

length([s])

문자열 s의 길이를 반환하거나 s가 제공되지 않은 경우 $0의 길이를 반환합니다. 배열 인수를 사용하여 length()는 배열의 요소 수를 반환합니다.

match(s, r [, a])

정규식 r이 발생하는 s의 위치를 반환하거나 r이 없으면 0을 반환하고 RSTART의 값을 설정합니다. 및 RLENGTH. 인수 순서는 ~ 연산자와 동일합니다: str ~ re.

배열이 a 제공되면 채워집니다.

patsplit(s, a [, r [, seps] ])

정규 표현식 r에서 문자열 s를 a 배열과 구분자 배열 seps로 분할하고 다음을 반환합니다. 필드 수. 요소 값은 r과 일치하는 s의 부분입니다. sep[i]의 값은 a[i 뒤에 나타나는 null 구분 기호일 수 있습니다. ]. seps[0]의 값은 null일 수 있는 선행 구분 기호입니다. r이 생략되면 FPAT이 대신 사용됩니다. 배열 a 및 seps가 먼저 지워집니다. 분할은 FPAT를 사용한 필드 분할과 동일하게 작동합니다.

split(s, a [, r [, seps] ])

정규 표현식 r에서 문자열 s를 a 배열과 구분자 배열 seps로 분할하고 다음을 반환합니다. 필드 수. r이 생략되면 FS가 대신 사용됩니다. 배열 a 및 seps가 먼저 지워집니다. seps[i]는 a[< 사이의 r과 일치하는 필드 구분 기호입니다.i] 및 a[i+1]. 분할은 필드 분할과 동일하게 작동합니다. .

sprintf(fmt , expr-list )

fmt에 따라 expr-list를 인쇄하고 결과 문자열을 반환합니다.

strtonum(str)

str을 검사하고 숫자 값을 반환합니다. str이 선행 0으로 시작하는 경우 8진수로 처리합니다. str이 선행 0x 또는 0X로 시작하는 경우 16진수로 취급합니다. 그렇지 않으면 십진수라고 가정합니다.

sub(r, s [, t])

gsub()과 같지만 일치하는 첫 번째 하위 문자열만 바꿉니다. 0 또는 1을 반환합니다.

substr(s, i [, n])

i에서 시작하는 s의 최대 n자 하위 문자열을 반환합니다. n이 생략된 경우 나머지 s를 사용합니다.

tolower(str)

문자열 str의 복사본을 반환합니다. str의 모든 대문자는 해당 소문자로 변환됩니다. 알파벳이 아닌 문자는 변경되지 않습니다.

toupper(str)

문자열 str의 복사본을 반환합니다. str의 모든 소문자는 해당 대문자로 변환됩니다. 알파벳이 아닌 문자는 변경되지 않습니다.

Gawk는 멀티바이트를 인식합니다. 이것은 index(), length(), substr() 및 match()가 모두 용어로 작동한다는 것을 의미합니다. 바이트가 아닌 문자.

시간 함수

Gawk는 타임스탬프를 얻고 형식화하기 위해 다음과 같은 기능을 제공합니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Time-Functions에서 제공됩니다.

mktime(datespec [, utc-flag])

datespec을 systime()에 의해 반환된 것과 동일한 형식의 타임 스탬프로 바꾸고 결과를 반환합니다. utc-flag가 있고 0이 아니거나 null이 아닌 경우 시간은 UTC 시간대에 있는 것으로 간주됩니다. 그렇지 않으면 시간이 현지 시간대에 있는 것으로 간주됩니다. datespec에 충분한 요소가 포함되어 있지 않거나 결과 시간이 범위를 벗어나는 경우 mktime()은 -1을 반환합니다. datespec에 대한 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions를 참조하세요.

strftime([format [, timestamp[, utc-flag]]])

형식의 사양에 따라 타임스탬프 형식을 지정합니다. utc-flag가 있고 0이 아니거나 null이 아닌 경우 결과는 UTC이고 그렇지 않으면 결과는 현지 시간입니다. 타임스탬프는 systime()에 의해 반환된 것과 동일한 형식이어야 합니다. 타임스탬프가 없으면 현재 시간이 사용됩니다. 형식이 누락된 경우 날짜(1) 출력에 해당하는 기본 형식이 사용됩니다. 기본 형식은 PROCINFO["strftime"]에서 사용할 수 있습니다. 사용할 수 있는 형식 변환에 대해서는 ISO C의 strftime() 함수 사양을 참조하세요.

systime()

Epoch(POSIX 시스템에서 1970-01-01 00:00:00 UTC) 이후의 초 수로 현재 시간을 반환합니다.

비트 조작 기능

Gawk는 다음과 같은 비트 조작 기능을 제공합니다. 배정밀도 부동 소수점 값을 uintmax_t 정수로 변환하고 작업을 수행한 다음 결과를 다시 부동 소수점으로 변환하는 방식으로 작동합니다. 이러한 함수에 음의 피연산자를 전달하면 치명적인 오류가 발생합니다.

기능은 다음과 같습니다.

and(v1, v2 [, ...])

인수 목록에 제공된 값의 비트 AND를 반환합니다. 적어도 두 개는 있어야 합니다.

compl(val)

val의 비트 보수를 반환합니다.

lshift(val, count)

count 비트만큼 왼쪽으로 이동한 val의 값을 반환합니다.

or(v1, v2 [, ...])

인수 목록에 제공된 값의 비트 OR을 반환합니다. 적어도 두 개는 있어야 합니다.

rshift(val, count)

count 비트만큼 오른쪽으로 이동한 val의 값을 반환합니다.

xor(v1, v2 [, ...])

인수 목록에 제공된 값의 비트별 XOR을 반환합니다. 적어도 두 개는 있어야 합니다.

유형 함수

다음 함수는 인수에 대한 유형 관련 정보를 제공합니다.

isarray(x)

x가 배열이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

typeof(x)

x의 유형을 나타내는 문자열을 반환합니다. 문자열은 "array", "number", "regexp", "string", "strnum", "할당되지 않음" 또는 "정의되지 않음".

국제화 기능

런타임에 문자열을 번역하기 위해 AWK 프로그램 내에서 다음 기능을 사용할 수 있습니다. 자세한 내용은 https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions를 참조하세요.

bindtextdomain(directory [, domain])

gawk가 .gmo 파일을 찾는 디렉토리를 지정하십시오. ``표준'' 위치에 놓지 않거나 놓을 수 없는 경우입니다. 도메인이 ``바인딩''된 디렉토리를 반환합니다.

기본 도메인은 TEXTDOMAIN 값입니다. 디렉토리가 null 문자열("")인 경우 bindtextdomain()은 주어진 도메인 에 대한 현재 바인딩을 반환합니다. .

dcgettext(string [, domain [, category]])

로케일 카테고리 카테고리에 대한 텍스트 도메인 도메인의 문자열 번역을 반환합니다. 도메인의 기본값은 TEXTDOMAIN의 현재 값입니다. 카테고리의 기본값은 "LC_MESSAGES"입니다.

dcngettext(string1, string2, number [, domain [, category]])

로케일 범주 <에 대한 텍스트 도메인 도메인에서 string1 및 string2 번역의 숫자에 사용된 복수형을 반환합니다.카테고리. 도메인의 기본값은 TEXTDOMAIN의 현재 값입니다. 카테고리의 기본값은 "LC_MESSAGES"입니다.

부울 값 함수

특별한 부울 유형 값을 생성할 수 있습니다. 작동 방식과 존재 이유에 대해서는 설명서를 참조하십시오.

mkbool(expression )

expression의 부울 값을 기반으로 true 값 또는 false 값을 반환합니다. 참 값은 숫자 값 1을 가집니다. 거짓 값은 숫자 값 0을 가집니다.

사용자 정의 함수

AWK의 함수는 다음과 같이 정의됩니다.

기능 이름(매개변수 목록) { 문 }

함수는 패턴 또는 작업의 식 내에서 호출될 때 실행됩니다. 함수 호출에 제공된 실제 매개변수는 함수에서 선언된 공식 매개변수를 인스턴스화하는 데 사용됩니다. 배열은 참조로 전달되고 다른 변수는 값으로 전달됩니다.

지역 변수는 매개변수 목록에서 추가 매개변수로 선언됩니다. 관례는 매개 변수 목록의 추가 공백으로 지역 변수를 실제 매개 변수와 구분하는 것입니다. 예를 들어:

function  f(p, q,     a, b)	# a and b are local
{
	. . .
}

/abc/	{ . . . ; f(1, 2) ; . . . }

함수 호출의 왼쪽 괄호는 공백 없이 함수 이름 바로 뒤에 와야 합니다. 이 제한은 위에 나열된 내장 함수에는 적용되지 않습니다.

함수는 서로를 호출할 수 있으며 재귀적일 수 있습니다. 로컬 변수로 사용되는 함수 매개변수는 함수 호출 시 null 문자열과 숫자 0으로 초기화됩니다.

함수에서 값을 반환하려면 return expr을 사용하세요. 값이 제공되지 않거나 함수가 끝에서 "떨어져" 반환되는 경우 반환 값은 정의되지 않습니다.

함수는 간접적으로 호출될 수 있습니다. 이렇게 하려면 호출할 함수의 이름을 문자열로 변수에 할당합니다. 그런 다음 다음과 같이 @ 기호가 접두사로 붙은 함수 이름인 것처럼 변수를 사용합니다.

function myfunc()
{
	print "myfunc called"
	. . .
}

{	. . .
	the_func = "myfunc"
	@the_func()	# call through the_func to myfunc
	. . .
}

- -lint가 제공된 경우 gawk는 런타임이 아닌 구문 분석 시간에 정의되지 않은 함수 호출에 대해 경고합니다. 런타임에 정의되지 않은 함수를 호출하는 것은 치명적인 오류입니다.

새로운 기능을 동적으로 로드

@load 문을 사용하여 실행 중인 gawk 인터프리터에 C 또는 C++로 작성된 새 기능을 동적으로 추가할 수 있습니다. 자세한 내용은 이 매뉴얼 페이지의 범위를 벗어납니다. https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions를 참조하세요.

신호

gawk 프로파일러는 두 개의 신호를 받아들입니다. SIGUSR1은 프로필 및 함수 호출 스택을 프로필 파일(awkprof.out 또는 - -profile로 명명된 파일)에 덤프하도록 합니다. 옵션. 그런 다음 계속 실행됩니다. SIGHUP은 gawk가 프로필과 함수 호출 스택을 덤프한 다음 종료되도록 합니다.

국제화

문자열 상수는 큰따옴표로 묶인 일련의 문자입니다. 비영어권 환경에서는 AWK 프로그램의 문자열을 현지 자연어로 번역해야 하는 것으로 표시할 수 있습니다. 이러한 문자열은 선행 밑줄(“_ ”)로 AWK 프로그램에서 표시됩니다. 예를 들어,

gawk 'BEGIN { print "hello, world" }'

항상 hello, world를 출력합니다. 하지만,

gawk 'BEGIN { print _"hello, world" }'

프랑스에서는 bonjour, monde를 인쇄할 수 있습니다. 지역화 가능한 AWK 프로그램을 만들고 실행하는 것과 관련된 단계는 https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization을 참조하세요.

GNU 확장

Gawk에는 POSIX awk에 대한 확장이 너무 많습니다. https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html에 설명되어 있습니다. 모든 확장 기능은 - -traditional 또는 - -posix 옵션으로 gawk를 호출하여 비활성화할 수 있습니다.

환경 변수

AWKPATH 환경 변수는 gawk가 -f, - -file, -i 및 - -include 옵션 및 @include 지시문. 초기 검색에 실패하면 파일 이름에 .awk를 추가한 후 경로를 다시 검색합니다.

AWKLIBPATH 환경 변수는 gawk가 -l 및 을 통해 명명된 파일을 찾을 때 검색하는 디렉토리 목록을 제공하는 데 사용할 수 있습니다. - -로드 옵션.

GAWK_PERSIST_FILE 환경 변수(있는 경우)는 영구 메모리의 백업 저장소로 사용할 파일을 지정합니다. 실험적 기능입니다. 자세한 내용은 GAWK: 효과적인 AWK 프로그래밍을 참조하세요.

GAWK_READ_TIMEOUT 환경 변수는 터미널, 파이프 또는 소켓을 포함한 양방향 통신에서 입력을 읽기 위한 시간 초과를 밀리초 단위로 지정하는 데 사용할 수 있습니다.

소켓을 통해 원격 호스트에 연결하는 경우 GAWK_SOCK_RETRIES는 재시도 횟수를 제어하고 GAWK_MSEC_SLEEP은 재시도 간격을 제어합니다. 간격은 밀리초입니다. usleep(3)을 지원하지 않는 시스템에서는 값이 정수 초로 반올림됩니다.

POSIXLY_CORRECT가 환경에 존재하는 경우 gawk는 마치 - -posix가 명령줄에 지정된 것처럼 정확하게 작동합니다. - -lint가 지정된 경우 gawk는 이 효과에 대한 경고 메시지를 발행합니다.

환경에서 GAWK_NO_MPFR_WARN을 설정하여 지원 중단되는 MPFR 모드에 대한 경고를 음소거합니다.

종료 상태

exit 문이 값과 함께 사용되면 gawk는 주어진 숫자 값으로 종료됩니다.

그렇지 않고 실행 중에 문제가 없으면 gawk는 C 상수 EXIT_SUCCESS의 값으로 종료됩니다. 이것은 일반적으로 0입니다.

오류가 발생하면 gawk는 C 상수 EXIT_FAILURE 값으로 종료됩니다. 이것은 일반적으로 하나입니다.

치명적인 오류로 인해 gawk가 종료되면 종료 상태는 2입니다. 비 POSIX 시스템에서 이 값은 EXIT_FAILURE로 매핑될 수 있습니다.

버전 정보

이 매뉴얼 페이지는 gawk 버전 5.2를 문서화합니다.

저자

UNIX awk의 원래 버전은 Bell Laboratories의 Alfred Aho, Peter Weinberger 및 Brian Kernighan이 설계하고 구현했습니다. Brian Kernighan은 계속해서 이를 유지하고 향상시킵니다.

자유 소프트웨어 재단의 Paul Rubin과 Jay Fenlason은 gawk를 작성하여 UNIX 7판에 배포된 awk의 원래 버전과 호환되도록 했습니다. John Woods는 많은 버그 수정에 기여했습니다. David Trueman은 Arnold Robbins의 기여로 gawk가 UNIX awk의 새 버전과 호환되도록 만들었습니다. Arnold Robbins는 현재 관리자입니다.

gawk에 기여한 전체 목록과 관련 문서는 GAWK: 효과적인 AWK 프로그래밍을 참조하세요.

관리자 및 현재 지원되는 포트에 대한 최신 정보는 gawk 배포판의 README 파일을 참조하세요.

버그 보고서

gawk에서 버그를 발견하면 gawkbug(1) 프로그램을 사용하여 보고하십시오.

버그 보고에 대한 전체 지침은 https://www.gnu.org/software/gawk/manual/html_node/Bugs.html에서 제공됩니다. 제공된 지침을 주의 깊게 읽고 따르십시오. 이렇게 하면 관련된 모든 사람이 훨씬 쉽게 버그 보고 및 해결을 할 수 있습니다. 정말.

버그

-F 옵션은 명령줄 변수 할당 기능을 제공할 때 필요하지 않습니다. 이전 버전과의 호환성을 위해서만 남아 있습니다.

이 매뉴얼 페이지가 너무 깁니다. gawk에는 기능이 너무 많습니다.

또한보십시오

egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3).

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

GAWK: Effective AWK Programming, Edition 5.2, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual.

The GNU gettext documentation, available online at https://www.gnu.org/software/gettext.

예

Print and sort the login names of all users:

	BEGIN	{ FS = ":" }
		{ print $1 | "sort" }

Count lines in a file:

		{ nlines++ }
	END	{ print nlines }

Precede each line by its number in the file:

	{ print FNR, $0 }

Concatenate and line number (a variation on a theme):

	{ print NR, $0 }

Run an external command for particular lines of data:

	tail -f access_log |
	awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'

감사의 말

Brian Kernighan은 테스트 및 디버깅 중에 귀중한 도움을 제공했습니다. 감사합니다.

권한 복사

저작권 © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013년, 2014년, 2015년, 2016년, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.

저작권 표시가 있는 경우 이 매뉴얼 페이지의 축어적 사본을 만들고 배포할 수 있는 권한이 부여되며 이 권한 표시가 모든 사본에 보존됩니다.

troff를 통해 이 파일을 처리하고 결과를 인쇄할 수 있는 권한이 부여됩니다. 단, 인쇄된 문서에 이 단락이 제거된 것을 제외하고는 이와 동일한 복사 허가 알림이 포함되어 있어야 합니다(이 단락은 인쇄된 매뉴얼 페이지와 관련이 없습니다).

전체 파생 저작물이 이와 동일한 허가 통지 조건에 따라 배포되는 경우 축어적 복사 조건에 따라 이 매뉴얼 페이지의 수정된 버전을 복사 및 배포할 수 있는 권한이 부여됩니다.

수정된 버전에 대한 위의 조건에 따라 이 매뉴얼 페이지의 번역본을 다른 언어로 복사 및 배포할 수 있는 권한이 부여됩니다. 단, 이 허가 통지는 재단이 승인한 번역본에 명시될 수 있습니다.