Linux 명령어 배우기 - gawk

이름

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

개요

gawk [POSIX 또는 GNU 스타일 옵션] -f program-file [ - ] file ...
gawk [POSIX 또는 GNU 스타일 옵션] [ - ] 프로그램 텍스트 파일 ...

pgawk [POSIX 또는 GNU 스타일 옵션] -f program-file [ - ] file ...
pgawk [POSIX 또는 GNU 스타일 옵션] [ - ] 프로그램 텍스트 파일 ...

기술

GawkGNU 프로젝트의 AWK 프로그래밍 언어 구현입니다. 이는 POSIX 1003.2 명령 언어 및 유틸리티 표준에있는 언어의 정의를 따릅니다. 이 버전은 Aho, Kernighan 및 Weinberger의 The AWK Programming Language 의 설명과 System V 릴리스 4 버전의 UNIX awk에 있는 추가 기능을 기반으로합니다. Gawk 은 더 최근의 Bell Laboratories awk 확장과 많은 GNU 특정 확장을 제공합니다.

Pgawkgawk 의 프로파일 링 버전입니다. 프로그램이 더 느리게 실행된다는 점을 제외하면 gawk 와 모든면에서 동일하며 완료되면 awkprof.out 파일에 실행 프로파일을 자동으로 생성합니다. 아래의 --profile 옵션을 참조하십시오.

명령 행은 gwk 옵션, AWK 프로그램 텍스트 ( -f 또는 --file 옵션을 통해 제공되지 않은 경우) 및 ARGCARGV 사전 정의 AWK 변수에서 사용할 수있는 값으로 구성됩니다.

옵션 형식

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

POSIX 표준에 따라, gawk 특정 옵션은 인수를 통해 -W 옵션에 제공됩니다. 여러 개의 -W 옵션이 제공 될 수 있습니다. 각 -W 옵션에는 아래에 설명 된대로 긴 옵션이 있습니다. 긴 옵션에 대한 인수는 공백없이 = 부호로 옵션과 결합되거나 다음 명령 행 인수에 제공 될 수 있습니다. 약어가 고유 한 경우 긴 옵션은 축약 될 수 있습니다.

옵션

Gawk 은 알파벳순으로 나열된 다음 옵션을 허용합니다.

-F fs

--field-separator fs 입력 필드 분리 기호 ( FS 사전 정의 된 변수의 값)로 fs를 사용하십시오.

-v var = val

--assign var = val 프로그램 실행이 시작되기 전에 변수 val 에 값 val 을 대입합니다. 이러한 변수 값은 AWK 프로그램의 BEGIN 블록에서 사용할 수 있습니다.

-f program-file

--file program-file 첫 번째 명령 줄 인수 대신 program-file 파일에서 AWK 프로그램 소스를 읽습니다. 여러 개의 -f (또는 --file ) 옵션을 사용할 수 있습니다.

-mf NNN

-mr NNN 다양한 메모리 한계를 NNN 값으로 설정합니다. f 플래그는 최대 필드 수를 설정하고 r 플래그는 최대 레코드 크기를 설정합니다. 이 두 플래그와 -m 옵션은 Bell Laboratories의 UNIX awk 연구 버전에서 가져온 것입니다. gawk 에는 사전 정의 된 제한이 없기 때문에 gawk 는이를 무시합니다.

-W compat

-W 전통

--compat

--traditional 호환성 모드에서 실행됩니다. 호환 모드에서 gawkUNIX awk 와 동일하게 작동합니다. GNU 특정 확장은 인식되지 않습니다. --traditional 의 사용은이 옵션의 다른 형태보다 선호됩니다. 자세한 내용은 아래의 GNU 확장 을 참조하십시오.

-W 카피 레프트

-W 저작권

--copyleft

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

-W 덤프 변수 [ = file ]

--dump-variables [ = file ] 전역 변수, 유형 및 최종 값의 정렬 된 목록을 파일로 인쇄 합니다 . 파일 이 제공되지 않으면 gawk 는 현재 디렉토리에서 awkvars.out 이라는 파일을 사용합니다.

모든 전역 변수 목록을 갖는 것이 프로그램의 인쇄상의 오류를 찾는 좋은 방법입니다. 함수가 많은 큰 프로그램이 있고 함수가 실수로 전역 변수를 사용하지 않도록하려면이 옵션을 사용하십시오. ( i , j 등의 간단한 변수 이름을 사용하면 특히 실수가 쉽습니다.)

-W 도움

-W 사용법

--도움

--usage 표준 출력에서 ​​사용 가능한 옵션의 비교적 짧은 요약을 인쇄합니다. GNU 코딩 표준에 따라 이러한 옵션을 사용하면 즉시 종료 할 수 있습니다.

-W lint [ = 치명적인 ]

--lint [ = 치명적인 ] 다른 AWK 구현에 대해 모호하거나 이식성이없는 구문에 대한 경고를 제공합니다. 치명적인 선택적 인수를 사용하면 lint 경고가 치명적 오류가됩니다. 이것은 과감 할 수도 있지만, 그 사용은 분명히 AWK 프로그램의 개발을 장려 할 것입니다.

- 보푸라기가 오래된

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

-W gen-po

--gen-po AWK 프로그램을 스캔하고 파싱하고 GNU .po 형식 파일을 프로그램의 모든 현지화 가능 문자열에 대한 항목과 함께 표준 출력에 생성합니다. 프로그램 자체는 실행되지 않습니다. .po 파일에 대한 자세한 내용은 GNU gettext 배포판을 참조하십시오.

-W 비 - 소수 데이터

--non-decimal-data 입력 데이터의 8 진수 및 16 진수 값을 인식합니다. 이 옵션을 사용할 때는 매우주의하십시오!

-W posix

--posix 다음과 같은 추가 제한 사항과 함께 호환성 모드를 켭니다.

*

\ x 이스케이프 시퀀스가 ​​인식되지 않습니다.

*

FS 가 단일 공백으로 설정되었을 때 스페이스 및 탭만 필드 분리 자로 사용되며 개행 문자는 사용하지 않습니다.

*

이후에 줄을 계속할 수 없습니까?: .

*

키워드 함수 의 동의어 func 이 인식되지 않습니다.

*

^^ = 대신 **** = 연산자를 사용할 수 없습니다.

*

fflush () 함수를 사용할 수 없습니다.

-W profile [ = prof_file ]

--profile [ = prof_file ] 프로파일 링 데이터를 prof_file에 보냅니다 . 기본값은 awkprof.out 입니다. gawk로 실행할 때, 프로파일은 프로그램의 "꽤 인쇄 된"버전 일뿐입니다. pgawk 를 사용하여 실행하면 프로필에는 왼쪽 여백에있는 프로그램의 각 명령문 실행 횟수와 각 사용자 정의 함수에 대한 함수 호출 수가 포함됩니다.

-W 간격 재 지정

--re-interval 정규식 일치 (아래의 정규 표현식 참조)에서 간격 표현식 의 사용을 활성화합니다. 간격 표현은 AWK 언어에서 전통적으로 사용 가능하지 않았습니다. POSIX 표준은 awkegrep 을 서로 일관되게 만들기 위해 그것들을 추가했다. 그러나, 그것들을 사용하면 오래된 AWK 프로그램이 손상 될 수 있으므로 gawk 는이 옵션으로 요청되거나 --posix 가 지정된 경우 에만 gak 을 제공합니다.

-W 소스 프로그램 텍스트

--source program-text AWK 프로그램 소스 코드로 program-text를 사용하십시오. 이 옵션을 사용하면 -f--file 옵션을 통해 사용되는 라이브러리 함수를 명령 줄에 입력 된 소스 코드와 쉽게 섞을 수 있습니다. 이것은 주로 쉘 스크립트에서 사용되는 중대형 AWK 프로그램 용입니다.

-W 버전

--version gawk 의이 특정 사본에 대한 버전 정보를 표준 출력에 인쇄합니다. 이것은 주로 자유 소프트웨어 재단이 배포하는 것과 관련하여 시스템에있는 gawk 의 최신 사본이 최신인지를 아는 데 유용합니다. 이는 버그를보고 할 때도 유용합니다. GNU 코딩 표준에 따라 이러한 옵션을 사용하면 즉시 종료 할 수 있습니다.

- 옵션의 끝을 알리십시오. 이는 AWK 프로그램 자체에 "-"로 시작하는 추가 인수를 허용하는 데 유용합니다. 대부분의 다른 POSIX 프로그램에서 사용되는 인수 구문 분석 규칙과 일관성을 유지하기 위해 주로 사용됩니다.

호환 모드에서 다른 옵션은 모두 유효하지 않으나 무시됩니다. 통상의 조작에서는, 프로그램 텍스트가 제공되고있는 한, 미지의 옵션이 ARGV 배열의 AWK 프로그램에 건네 주어 처리됩니다. 이는 특히``! ''실행 인터프리터 메커니즘을 통해 AWK 프로그램을 실행하는 데 유용합니다.

AWK 프로그램 실행

AWK 프로그램은 일련의 패턴 동작 명령문과 선택적 함수 정의로 구성됩니다.

패턴 { 액션 문 }

함수 이름 ( 매개 변수 목록 ) { 명령문 }

Gawk 은 지정된 경우 프로그램 파일 에서 프로그램 원본을 읽거나 --source 인수 또는 명령 줄의 첫 번째 비표준 인수에서 프로그램 원본을 읽습니다. -f--source 옵션은 명령 행에서 여러 번 사용될 수 있습니다. Gawk 는 모든 프로그램 파일 과 명령 줄 원본 텍스트가 함께 연결되어있는 것처럼 프로그램 텍스트를 읽습니다. 이는 AWK 함수를 사용하는 새로운 AWK 프로그램에 AWK 함수를 포함하지 않고도 AWK 함수 라이브러리를 빌드하는 데 유용합니다. 또한 라이브러리 함수를 명령 행 프로그램과 혼합하는 기능을 제공합니다.

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

Gawk 는 다음 순서로 AWK 프로그램을 실행합니다. 먼저, -v 옵션을 통해 지정된 모든 변수 지정이 수행됩니다. 그런 다음 gawk 은 프로그램을 내부 형식으로 컴파일합니다. 그런 다음 gawkBEGIN 블록 (있는 경우)에서 코드를 실행 한 다음 ARGV 배열에 명명 된 각 파일을 읽습니다. 명령 행에 파일 이름이 없으면 gawk 는 표준 입력을 읽습니다.

명령 줄에있는 파일 이름의 형식이 var = val 이면 변수 할당으로 처리됩니다. 변수 var 에 값 val 이 지정됩니다. 명령 줄 변수 할당은 AWK가 입력을 필드와 레코드로 나누는 방법을 제어하는 ​​데 사용하는 변수에 동적으로 값을 할당하는 데 가장 유용합니다. 단일 데이터 파일에 대해 여러 번 통과해야하는 경우에도 상태를 제어하는 ​​데 유용합니다.

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

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

마지막으로, 모든 입력이 모두 소모 된 후 gawkEND 블록 (있는 경우)에서 코드를 실행합니다.

변수, 레코드 및 필드

AWK 변수는 동적입니다. 그들은 처음 사용될 때 존재하게됩니다. 이들의 값은 사용 방법에 따라 부동 소수점 숫자 또는 문자열이거나 둘 다입니다. AWK는 또한 1 차원 배열을 가지고 있습니다. 여러 차원의 배열을 시뮬레이션 할 수 있습니다. 프로그램이 실행될 때 몇 가지 사전 정의 된 변수가 설정됩니다. 이것들은 필요에 따라 서술 될 것이며 아래에 요약 될 것이다.

기록

일반적으로 레코드는 개행 문자로 구분됩니다. 내장 변수 RS 에 값을 할당하여 레코드 분리 방법을 제어 할 수 있습니다. RS 가 단일 문자이면 해당 문자가 레코드를 분리합니다. 그렇지 않으면 RS 는 정규 표현식입니다. 이 정규 표현식과 일치하는 입력의 텍스트가 레코드를 분리합니다. 그러나 호환 모드에서는 문자열 값의 첫 번째 문자 만 레코드 분리에 사용됩니다. RS 가 널 문자열로 설정되면 레코드는 공백 행으로 분리됩니다. RS 가 널 문자열로 설정되면, 개행 문자는 FS 가 가질 수있는 값 이외에 항상 필드 분리 기호로 작용합니다.

전지

각 입력 레코드가 읽힐 때 gawk 는 필드 변수로 FS 변수의 값을 사용하여 레코드를 필드 로 나눕니다. FS 가 단일 문자이면 필드는 해당 문자로 구분됩니다. FS 가 공 문자열이면 각 개별 문자는 별도의 필드가됩니다. 그렇지 않으면 FS 는 완전한 정규 표현식이 될 것으로 예상됩니다. FS 가 단일 공간 인 특별한 경우에는 필드가 공백 및 / 또는 탭 및 / 또는 줄 바꿈으로 구분됩니다. (하지만 아래의 --posix 토론을 참조하십시오). 참고 : IGNORECASE (아래 참조)의 값은 FS 가 정규 표현식 일 때 필드가 분할되는 방법과 RS 가 정규 표현식 일 때 레코드가 분리되는 방법에도 영향을줍니다.

FIELDWIDTHS 변수가 공백으로 구분 된 숫자 목록으로 설정된 경우 각 필드는 고정 너비가 있어야하며 gawk 는 지정된 너비를 사용하여 레코드를 분할합니다. FS 의 값은 무시됩니다. FS에 새 값을 할당하면 FIELDWIDTHS를 무시하고 기본 동작을 복원합니다.

입력 레코드의 각 필드는 $ 1 , $ 2 등의 위치로 참조 될 수 있습니다. $ 0 는 전체 기록입니다. 필드는 상수에 의해 참조 될 필요가 없습니다.

n = 5
$ n 인쇄하기

입력 레코드의 다섯 번째 필드를 인쇄합니다.

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

존재하지 않는 필드 ( $ NF 다음의 필드)에 대한 참조는 널 문자열을 생성합니다. 그러나 존재하지 않는 필드 (예 : $ (NF + 2) = 5 )에 할당하면 NF 의 값이 증가하고 null 문자열을 값으로 사용하여 매개 변수가 만들어지고 $ 0 의 값이 다시 계산됩니다 필드는 OFS 값으로 구분됩니다. 음수로 표시된 필드를 참조하면 치명적인 오류가 발생합니다. NF를 감소 시키면 새 값을 지나친 필드 값이 손실되고 $ 0 값은 OFS 값으로 분리 된 필드와 함께 다시 계산됩니다.

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

기본 제공 변수

Gawk 의 기본 제공 변수는 다음과 같습니다.

ARGC

명령 행 인수의 수 ( gawk 또는 프로그램 소스의 옵션을 포함하지 않음).

ARGIND

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

ARGV

명령 행 인수의 배열. 배열은 0에서 ARGC - 1까지 색인화됩니다. ARGV 의 내용을 동적으로 변경하면 데이터에 사용되는 파일을 제어 할 수 있습니다.

BINMODE

비 POSIX 시스템에서는 모든 파일 I / O에 대해 "binary"모드를 사용하도록 지정합니다. 1, 2 또는 3의 숫자 값은 입력 파일, 출력 파일 또는 모든 파일 각각이 2 진 입출력을 사용해야 함을 지정합니다. "r" 또는 "w" 의 문자열 값은 입력 파일 또는 출력 파일 각각이 2 진 입출력을 사용해야 함을 지정합니다. "rw" 또는 "wr" 의 문자열 값은 모든 파일이 2 진 입출력을 사용해야 함을 지정합니다. 다른 문자열 값은 "rw" 로 취급되지만 경고 메시지가 생성됩니다.

속임수

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

환경

현재의 환경의 값을 포함한 배열입니다. 배열은 환경 변수에 의해 색인화되며 각 요소는 해당 변수의 값입니다 (예 : ENVIRON [ "HOME"] / home / arnold ). 이 배열을 변경해도, 리다이렉트 (redirection) 또는 system () 함수에 의해 생성 된 프로그램에 의해 나타나는 환경에는 영향을주지 않습니다.

ERRNO

getline에 대한 리다이렉션, getline 에 대한 읽기 중에 또는 close () 중에 시스템 오류가 발생하면 ERRNO 에 오류를 설명하는 문자열이 포함됩니다. 이 값은 영어가 아닌 언어로 번역 된 것입니다.

FIELDWIDTHS

공백으로 구분 된 필드 폭 목록. 설정시, gawkFS 변수의 값을 필드 분리 자로 사용하는 대신 입력을 고정 너비의 필드로 구문 분석합니다.

파일 이름

현재 입력 파일의 이름. 명령 행에 파일이 지정되지 않으면, FILENAME 의 값은``- ''입니다. 그러나 FILENAMEBEGIN 블록 내에서 정의되지 않습니다 ( getline에 의해 설정되지 않은 한).

FNR

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

FS

입력 필드 구분 기호로, 기본적으로 공백입니다. 위의 필드를 참조하십시오.

이모 니세

모든 정규 표현식과 문자열 연산의 대소 문자를 구분합니다. IGNORECASE에 0이 아닌 값이 있으면 규칙에서 문자열 비교 및 ​​패턴 일치, FS로 필드 분할, RS로 분리 된 레코드, ~! ~ 과 정규 표현식 일치, gensub () , gsub () , index () , match () , split ()sub () 내장 함수는 모두 정규 표현식 연산을 수행 할 때 대 / 소문자를 무시합니다. 참고 : 배열 첨자는 영향을받지 않으며 asort () 함수도 영향을받지 않습니다 .

따라서 IGNORECASE 가 0이 아니면 / ab / 는 모든 문자열 "ab" , "aB" , "Ab""AB" 와 일치합니다. 모든 AWK 변수와 마찬가지로 IGNORECASE 의 초기 값은 0이므로 모든 정규 표현식과 문자열 연산은 대개 대소 문자를 구분합니다. Unix에서는 대소 문자를 무시할 때 전체 ISO 8859-1 Latin-1 문자 세트가 사용됩니다.

LINT

AWK 프로그램 내에서 --lint 옵션을 동적으로 제어합니다. true이면 gawk 는 보풀 경고를 인쇄합니다. 거짓 일 경우, 그렇지 않습니다. 문자열 값이 "fatal"로 지정 되면 lint 경고는 치명적 오류가됩니다. 정확하게 --lint = fatal같습니다 . 다른 모든 실제 값은 경고를 인쇄합니다.

NF

현재 입력 레코드의 필드 수

NR

지금까지 표시된 총 입력 레코드 수입니다.

OFMT

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

OFS

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

ORS

출력 레코드 분리 기호, 기본적으로 개행.

PROCINFO

이 배열의 요소는 실행중인 AWK 프로그램에 대한 정보에 대한 액세스를 제공합니다. 일부 시스템에서는 어레이에 요소가있을 수 있습니다. 일부 그룹 에는 "group1" 에서 " n " 까지의 그룹이 있습니다.이 그룹은 프로세스에있는 보조 그룹의 수입니다. in 연산자를 사용하여 이러한 요소를 테스트합니다. 다음 요소를 사용할 수 있습니다.

PROCINFO [ "egid"]

getegid (2) 시스템 호출의 값.

PROCINFO [ "euid"]

geteuid (2) 시스템 호출의 값.

PROCINFO [ "FS"]

FS로 필드 분할이 적용되면 "FS" 또는 FIELDWIDTHS로 필드 분할이 적용 되면 "FIELDWIDTHS" .

PROCINFO [ "gid"]

getgid (2) 시스템 호출의 값.

PROCINFO [ "pgrpid"]

현재 프로세스의 프로세스 그룹 ID.

PROCINFO [ "pid"]

현재 프로세스의 프로세스 ID.

PROCINFO [ "ppid"]

현재 프로세스의 부모 프로세스 ID

PROCINFO [ "uid"]

getuid (2) 시스템 호출의 값.

RS

입력 레코드 분리 기호, 기본적으로 개행.

RT

레코드 터미네이터. GawkRTRS에서 지정한 문자 또는 정규 표현식과 일치하는 입력 텍스트로 설정합니다.

RSTART

match ()에 의해 매치 된 첫 번째 문자의 인덱스. 일치하는 항목이 없으면 0입니다. (이것은 문자 인덱스가 하나에서 시작한다는 것을 의미합니다.)

RLENGTH

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

SUBSEP

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

텍스트

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

배열

배열은 대괄호 ( [] ) 사이의 식으로 첨자 처리됩니다. 표현식이 표현식 목록 ( expr , expr ...)이면 배열 첨자는 각 표현식의 (문자열) 값을 SUBSEP 변수의 값으로 분리하여 연결 한 문자열입니다. 이 기능은 차원이 지정된 배열을 시뮬레이트하는 데 사용됩니다. 예 :

i = "A"; j = "B"; k = "C"
x [i, j, k] = "안녕하세요, 세계 \ n"

문자열 "hello, world \ n" 을 문자열 "A \ 034B \ 034C" 로 색인화 된 배열 x 의 요소에 대입 합니다. AWK의 모든 배열은 연관성이 있습니다. 즉 문자열 값으로 인덱싱됩니다.

in 또는 while 문에서 특수 연산자 in을 사용하여 배열에 특정 값으로 구성된 인덱스가 있는지 확인할 수 있습니다.

if (배열의 val) print 배열 [val]

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

in 구조는 for 루프에서 배열의 모든 요소를 ​​반복하는 데 사용될 수도 있습니다.

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

변수 타이핑 및 변환

변수 및 필드는 (부동 소수점) 숫자 또는 문자열이거나 둘 다일 수 있습니다. 변수의 값이 문맥에 따라 어떻게 해석되는지. 숫자 식에서 사용되는 경우 숫자로 처리되고 문자열로 사용되면 문자열로 처리됩니다.

변수를 강제로 숫자로 취급하려면 0을 추가하십시오. 강제로 문자열로 처리하고, 널 (null). 자 열과 결합시킵니다.

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

CONVFMT = "% 2.2f"a = 12 b = a ""

b 변수의 문자열 값은 "12.00"이 아니라 "12.00" 입니다.

Gawk 는 다음과 같이 비교를 수행합니다. 두 변수가 숫자 인 경우 숫자가 비교됩니다. 한 값이 숫자이고 다른 값이 "숫자 문자열"인 문자열 값을 가지면 비교도 숫자로 수행됩니다. 그렇지 않으면 숫자 값이 문자열로 변환되고 문자열 비교가 수행됩니다. 물론 두 개의 문자열이 문자열로 비교됩니다. POSIX 표준은 문자열 상수에도 모든 곳에서 "숫자 문자열"개념을 적용합니다. 그러나 이것은 분명히 부정확하며 gawk 은 이것을하지 않습니다. 다행히 표준의 다음 버전에서 수정되었습니다.

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

초기화되지 않은 변수는 숫자 값 0과 문자열 값 ""(null 또는 빈 문자열)을가집니다.

8 진수 및 16 진수 상수

gawk 버전 3.1부터는 AWK 프로그램 소스 코드에서 C 스타일의 8 진수 및 16 진수를 사용할 수 있습니다. 예를 들어, 8 진수 값 011 은 10 진수 9 와 같으며 16 진수 값 0x11 은 10 진수 17과 같습니다.

문자열 상수

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

\\

리터럴 백 슬래시.

\에이

``경고 ''문자; 보통 ASCII BEL 문자.

\비

역행 키이.

\에프

form-feed.

\엔

줄 바꿈.

\아르 자형

캐리지 리턴.

\티

수평 탭.

\V

수직 탭.

\ x 16 진수

\ x 다음에 오는 16 진수 문자열로 표시되는 문자입니다. ANSIC에서와 같이 16 진법을 따르는 모든 문자는 이스케이프 시퀀스의 일부로 간주됩니다. (이 기능은위원회에서 언어 디자인에 대해 알려줄 것입니다.) 예를 들어 "\ x1B" 는 ASCIIESC (이스케이프) 문자입니다.

\ ddd

1, 2, 또는 3 자리수의 8 진수로 나타내지는 문자. 예를 들어 "\ 033" 은 ASCII ESC (이스케이프) 문자입니다.

\ c

리터럴 문자 c .

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

호환 모드에서 8 진수 및 16 진수 이스케이프 시퀀스로 표시되는 문자는 정규식 상수에 사용되는 경우 그대로 취급됩니다. 따라서 / a \ 52b // a \ * b / 와 동일합니다.

패턴과 액션

AWK는 라인 지향 언어입니다. 패턴이 먼저오고 그 다음에 행동이옵니다. 동작 설명은 {} 로 묶습니다. 패턴이 누락되거나 조치가 누락 될 수 있지만, 물론 둘 모두가 누락 될 수는 없습니다. 패턴이 누락 된 경우, 조치는 입력의 모든 단일 레코드에 대해 실행됩니다. 누락 된 행동은

{인쇄}

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

코멘트는``# ''문자로 시작하여 줄 끝까지 계속됩니다. 문장을 구분하기 위해 빈 줄을 사용할 수 있습니다. 일반적으로 명령문은 개행 문자로 끝나지 만,``, '', { , ? , }로 끝나는 행에는 적용되지 않습니다 . , : , && 또는 || . do 또는 else로 끝나는 행은 자동으로 다음 명령문을 계속 사용합니다. 다른 경우에 ''를 사용하여 줄을 계속할 수 있습니다.이 경우 줄 바꿈은 무시됩니다.

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

패턴

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

BEGIN END / 정규 표현식 / 관계형 표현 패턴 && 패턴 패턴 || 패턴 패턴 ? 패턴 : 패턴 ( 패턴 ) ! 패턴 pattern1 , pattern2

BEGINEND 는 입력에 대해 테스트되지 않은 두 가지 특별한 종류의 패턴입니다. 모든 BEGIN 패턴의 동작 부분은 모든 문이 단일 BEGIN 블록에 작성된 것처럼 병합됩니다. 입력이 읽히기 전에 실행됩니다. 비슷하게, 모든 END 블록은 병합되어 모든 입력이 다 소모 될 때 (또는 exit 문이 실행될 때) 실행됩니다. BEGINEND 패턴은 패턴 표현식의 다른 패턴과 결합 될 수 없습니다. BEGINEND 패턴에는 누락 된 작업 부분이있을 수 없습니다.

/ 정규식 / 패턴의 경우, 연관된 명령문은 정규 표현식과 일치하는 각 입력 레코드에 대해 실행됩니다. 정규식은 egrep (1)의 정규식과 동일하며 아래에 요약되어 있습니다.

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

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

? : 연산자는 C에서와 같은 연산자입니다. 첫 번째 패턴이 true이면 테스트에 사용 된 패턴이 두 번째 패턴이고, 그렇지 않으면 세 번째 패턴입니다. 두 번째 및 세 번째 패턴 중 하나만 평가됩니다.

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

정규 표현식

정규 표현식은 egrep 에서 발견되는 확장 된 종류입니다. 그들은 다음과 같이 문자로 구성됩니다 :

기음

비 메타 문자와 일치합니다. c .

\기음

리터럴 문자와 일치합니다. c .

.

개행 문자를 포함한 모든 문자와 일치합니다.

^

문자열의 시작과 일치합니다.

$

문자열의 끝과 일치합니다.

[ abc ... ]

문자 목록은 문자 abc ... 중 임의의 문자와 일치합니다.

[^ abc ... ]

부정 문자 목록은 abc ...를 제외한 모든 문자와 일치합니다.

r1 | r2

alternation : r1 또는 r2 와 일치합니다.

r1r2

연결 : r1 과 일치하고 r2 와 일치합니다.

r +

하나 이상의 r 과 일치합니다.

r *

0 개 이상의 r 과 일치합니다.

r ?

0 또는 1 개의 r 과 일치합니다.

( r )

그룹화 : r 과 일치합니다.

r { n }

r { n }

r { n , m } 중괄호 안에있는 하나 또는 두 개의 숫자는 간격 식을 나타냅니다. 중괄호에 하나의 숫자가 있으면 앞의 정규 표현식 rn 번 반복됩니다. 쉼표로 구분 된 두 개의 숫자가있는 경우 rn 부터 m 회 반복됩니다. 하나의 숫자 뒤에 쉼표가 오는 경우 r 은 적어도 n 번 반복됩니다.

간격 표현식은 --posix 또는 --re-interval 이 명령 행에 지정된 경우에만 사용 가능합니다.

\와이

단어의 시작 또는 끝에서 빈 문자열을 찾습니다.

\비

한 단어 내의 빈 문자열과 일치합니다.

\ <

단어의 시작 부분에있는 빈 문자열과 일치합니다.

\>

단어의 끝에있는 빈 문자열과 일치합니다.

\ w

단어 구성 문자 (문자, 숫자 또는 밑줄)와 일치합니다.

\ W

단어 구성 요소가 아닌 문자를 찾습니다.

\`

버퍼 (문자열)의 시작 부분에있는 빈 문자열과 일치합니다.

\ '

버퍼의 끝에있는 빈 문자열과 일치합니다.

문자열 상수 (아래 참조)에서 유효한 이스케이프 시퀀스는 정규 표현식에서도 유효합니다.

문자 클래스 는 POSIX 표준에서 소개 된 새로운 기능입니다. 문자 클래스는 특정 속성이있는 문자 목록을 설명하기위한 특수 표기법이지만 실제 문자 자체는 국가마다 다를 수 있으며 문자 집합과 문자 집합간에 다를 수 있습니다. 예를 들어, 알파벳 문자의 개념은 미국과 프랑스에서 다릅니다.

문자 클래스는 문자 목록의 괄호 안의 정규 표현식에서만 유효합니다. 문자 클래스는 [: , 클래스를 나타내는 키워드 및 :]로 구성 됩니다. POSIX 표준에 정의 된 문자 클래스는 다음과 같습니다.

[: alnum :]

영숫자 문자.

[: alpha :]

영문자.

[:공백:]

스페이스 또는 탭 문자.

[: cntrl :]

제어 문자.

[:손가락:]

숫자.

[:그래프:]

인쇄 및 표시 가능한 문자. 공백은 인쇄 가능하지만 보이지는 않지만 a 는 둘 다입니다.

[:보다 낮은:]

소문자 알파벳 문자.

[:인쇄:]

인쇄 가능한 문자 (제어 문자가 아닌 문자)

[: punct :]

구두점 문자 (문자, 숫자, 제어 문자 또는 공백 문자가 아닌 문자).

[:공간:]

공백 문자 (예 : 공백, 탭 및 양식 공백).

[:높은:]

대문자 알파벳 문자.

[: xdigit :]

문자는 16 진수입니다.

예를 들어 POSIX 표준 이전에 영숫자를 일치 시키려면 / [A-Za-z0-9] / 를 써야합니다. 문자 세트에 다른 영문자가있는 경우이 문자는 문자 세트와 일치하지 않으며 문자 세트가 ASCII와 다른 방식으로 배열 된 경우 ASCII 영숫자 문자와 일치하지 않을 수도 있습니다. POSIX 문자 클래스를 사용하면 / [[: alnum :]] /을 쓸 수 있으며 이는 문자 집합의 알파벳 및 숫자와 일치합니다.

문자 목록에는 두 개의 추가 특수 시퀀스가 ​​나타날 수 있습니다. 이는 비 ASCII 문자 세트에 적용됩니다.이 문자 세트는 둘 이상의 문자로 표시되는 단일 기호 ( 조합 요소 라고 함) 및 조합 또는 분류 용도와 동일한 여러 문자를 가질 수 있습니다. 예를 들어 불어로는 'e'와 grave-accented 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 와 일치합니다.) 간격식이 허용됩니다.

--전통적인

전통적인 Unix awk 정규식이 일치합니다. GNU 연산자는 특별하지 않고 간격 표현식을 사용할 수없고 POSIX 문자 클래스도 없습니다 ( [[: alnum :]] 등). 8 진수 및 16 진수 이스케이프 시퀀스로 설명하는 문자는 정규 표현식 메타 문자를 나타내는 경우 라해도 문자 그대로 처리됩니다.

--re-interval

--traditional 이 제공된 경우에도 정규 표현식에서 간격 표현식을 허용합니다.

행위

동작 명령문은 중괄호 {} 로 묶습니다. 액션 문은 대부분의 언어에서 볼 수있는 일반적인 할당, 조건문 및 반복 문으로 구성됩니다. 사용할 수있는 연산자, 제어문 및 입출력 문은 C에있는 문 뒤에 패턴이 지정됩니다.

연산자

우선 순위가 낮은 순으로 AWK의 연산자는 다음과 같습니다.

( ... )

그룹화

$

필드 참조.

++ -

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

^

지수 연산 ( ** 도 사용할 수 있고 ** = 할당 연산자).

+ -!

단항 플러스, 단항 마이너스 및 논리적 부정.

* / %

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

+ -

더하기와 빼기.

공간

문자열 연결.

<>

<=> =

! = == 정규 관계 연산자.

~! ~

정규 표현식 일치, 부정합 일치. 참고 : ~ 또는 ! ~ 의 왼쪽에 상수 정규 표현식 ( / foo / )을 사용하지 마십시오. 오른쪽에 하나만 사용하십시오. 표현식 / foo / ~ exp(($ 0 ~ / foo /) ~ exp 와 같은 의미입니다. 이것은 보통 의도 한 바가 아닙니다 .

...에서

배열 구성원.

&&

논리적 AND.

||

논리적 OR.

? :

C 조건부 표현식. 이 형식은 expr1 입니까? expr2 : expr3 . expr1 이 참이면 표현식의 값은 expr2 이고, 그렇지 않으면 expr3 입니다. expr2expr3 중 하나만 평가됩니다.

= + = - =

* = / = % = ^ = 과제. 절대 할당 ( var = value ) 과 연산자 할당 (다른 형식)이 모두 지원됩니다.

제어문

제어문은 다음과 같습니다.

if ( condition ) statement [ else statement ] while ( condition ) 명령문 do 명령문 while ( condition ) for ( expr1 ; expr2 ; expr3 ) 명령문 ( var in array ) 명령문 break 계속 delete 배열 [ 인덱스 ] delete 배열 exit [ expression ] { 명세서 }

I / O 문

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

닫기 ( 파일 [ , 방법 ] )

파일, 파이프 또는 공동 처리를 닫습니다. 선택적 방법 은 양방향 파이프의 한쪽 끝을 공동 처리로 닫을 때만 사용해야합니다. 문자열 값이어야합니다 ( "to" 또는 "from") .

getline

다음 입력 레코드에서 $ 0 을 설정하십시오. NF , NR , FNR을 설정하십시오 .

getline < 파일

파일의 다음 레코드에서 $ 0 을 설정 하십시오 . NF를 설정하십시오.

getline var

다음 입력 레코드에서 var 를 설정하십시오. NR , FNR을 설정하십시오.

getline var < file

파일의 다음 레코드에서 var 를 설정 하십시오 .

명령 | getline [ var ]

출력을 위와 같이 $ 0 또는 var 로 출력하는 명령을 실행하십시오.

명령 | & getline [ var ]

출력을 위와 같이 $ 0 또는 var 로 파이프하는 공동 프로세스로 명령 을 실행합니다. 공동 프로세스는 gawk 확장입니다.

다음 것

현재 입력 레코드 처리를 중지합니다. 다음 입력 레코드를 읽고 AWK 프로그램의 첫 번째 패턴으로 처리를 시작합니다. 입력 데이터의 끝에 도달하면 END 블록이 실행됩니다 (있는 경우).

다음 파일

현재 입력 파일 처리를 중단합니다. 다음 입력 레코드 읽기는 다음 입력 파일에서옵니다. FILENAMEARGIND 가 업데이트되고 FNR 이 1로 재설정되며 AWK 프로그램의 첫 번째 패턴부터 처리가 시작됩니다. 입력 데이터의 끝에 도달하면 END 블록이 실행됩니다 (있는 경우).

인쇄

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

print expr-list

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

print expr-list > 파일

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

printf fmt, expr-list

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

printf fmt, expr-list > 파일

파일 에 서식을 지정하고 인쇄 하십시오 .

시스템 ( cmd-line )

cmd-line 명령을 실행하고 종료 상태를 반환하십시오. POSIX가 아닌 시스템에서는 사용할 수 없습니다.

fflush ( [ 파일 ] )

열려있는 출력 파일 또는 파이프 파일 과 연관된 버퍼를 모두 플러시 합니다 . 파일 이 없으면 표준 출력이 플러시됩니다. file 이 널 (null) 문자열이면 열려있는 모든 출력 파일과 파이프의 버퍼가 비 웁니다.

printprintf에 대해 추가 출력 방향 재 지정이 허용됩니다.

인쇄 ... >> 파일

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

인쇄 ... | 명령

파이프에 씁니다.

인쇄 ... | & 명령

데이터를 공동 처리로 보냅니다.

getline 명령은 파일 끝에서 0을 리턴하고 오류시 -1을 리턴합니다. 오류가 발생하면 ERRNO 에 문제점을 설명하는 문자열이 포함됩니다.

참고 : 파이프 또는 공동 처리를 사용하여 getline 을하거나 루프 내에서 print 또는 printf 사용하는 경우 close () 를 사용하여 명령의 새 인스턴스를 만들어야합니다. AWK는 EOF를 반환 할 때 파이프 또는 공동 프로세스를 자동으로 닫지 않습니다.

printf 문

printf 문과 sprintf () 함수의 AWK 버전 (아래 참조)은 다음 변환 지정 형식을 허용합니다.

%기음

ASCII 문자. % c에 사용 된 인수가 숫자이면 문자로 취급되어 인쇄됩니다. 그렇지 않으면 인수는 문자열로 간주되며 해당 문자열의 첫 번째 문자 만 인쇄됩니다.

% d , % i

10 진수 (정수 부분).

% e, % E

[-] d.dddddde [+ -] dd 형식의 부동 소수점 숫자. % E 형식은 e 대신 E 를 사용합니다.

%에프

[-] ddd.dddddd 형식의 부동 소수점 숫자.

% g, % G

중요하지 않은 0을 억제하고 % e 또는 % f 변환 중 더 짧은 것을 사용하십시오. % G 형식은 % e 대신 % E 를 사용합니다.

%영형

부호없는 8 진수 (정수).

% u 부호없는 십진수 (다시, 정수).

%에스

문자열.

% x, % X

부호없는 16 진수 (정수)입니다. % X 형식은 abcdef 대신 ABCDEF 를 사용합니다.

%%

단일 % 문자. 인수가 변환되지 않습니다.

선택적 매개 변수는 % 와 제어 문자 사이에있을 수 있습니다.

count $

서식의이 시점에서 count 번째 인수를 사용하십시오. 이것을 위치 지정 자라고하며 주로 AWK 프로그램의 원본 텍스트가 아닌 번역 된 형식 문자열 버전 용으로 사용됩니다. 그것은 gawk 확장입니다.

-

표현식은 해당 필드 내에서 왼쪽 정렬되어야합니다.

공간

숫자 변환의 경우 양수 값 앞에 공백을두고 음수 값에는 빼기 부호를 붙입니다.

+

너비 수정 자 (아래 참조) 앞에 사용되는 더하기 기호는 형식화 할 데이터가 양수인 경우에도 항상 숫자 변환에 대한 부호를 제공합니다. + 는 스페이스 수정자를 겹쳐 9니다.

#

특정 제어 문자에는 "대체 양식"을 사용하십시오. % o의 경우 선행 0을 제공하십시오. % x% X의 경우 0이 아닌 결과에 선행 0x 또는 0X 를 제공하십시오. % e , % E% f 의 경우 결과에는 항상 소수점이 포함됩니다. % g% G의 경우 후미에있는 0은 결과에서 제거되지 않습니다.

0

선행 0 (영)은 공백 대신 0으로 패딩되어야 함을 나타내는 플래그 역할을합니다. 이는 숫자가 아닌 출력 형식에도 적용됩니다. 이 플래그는 필드 너비가 인쇄 할 값보다 넓은 경우에만 적용됩니다.

필드는이 폭만큼 패딩되어야합니다. 필드는 일반적으로 공백으로 채워집니다. 0 플래그가 사용 된 경우 0 으로 채워집니다.

. 미리

인쇄 할 때 사용할 정밀도를 지정하는 숫자입니다. % e , % E% f 형식의 경우 소수점 오른쪽에 인쇄 할 자릿수를 지정합니다. % g% G 형식의 경우 최대 유효 자릿수를 지정합니다. % d , % o , % i , % u , % x% X 형식의 경우 인쇄 할 최소 자릿수를 지정합니다. % s의 경우 인쇄 할 문자열에서 최대 문자 수를 지정합니다.

ANSI C printf () 루틴의 동적 정밀도 기능이 지원됩니다. width 또는 prec 스펙 대신 A * 를 사용하면 해당 값이 printf 또는 sprintf ()에 대한 인수 목록에서 가져옵니다. 동적 폭 또는 정밀도가있는 위치 지정자를 사용하려면 형식 문자열에 * 뒤에 * 를 제공하십시오. 예 : "% 3 $ * 2 $. * 1 $ s" .

특수 파일 이름

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

/ dev / stdin

표준 입력입니다.

/ dev / stdout

표준 출력.

/ dev / stderr

표준 오류 출력.

/ dev / fd / n

열린 파일 설명자와 연결된 파일 n .

이것은 특히 오류 메시지에 유용합니다. 예 :

인쇄 "당신은 그것을 날려 버렸어!" > "/ dev / stderr"

그렇지 않으면 당신은

인쇄 "당신은 그것을 날려 버렸어!" | "cat 1> & 2"

TCP / IP 네트워크 연결을 생성하기 위해 | & 공동 처리 연산자와 함께 다음 특수 파일 이름을 사용할 수 있습니다.

/ inet / tcp / lport / rhost / rport

로컬 포트의 TCP / IP 연결을위한 파일 포트를 원격 포트 rport의 원격 호스트 rhost 로 포트. 시스템에 포트를 선택하게하려면 0 포트를 사용하십시오.

/ inet / udp / lport / rhost / rport

비슷하지만 TCP / IP 대신 UDP / IP를 사용하십시오.

/ inet / raw / lport / rhost / rport

나중에 사용하기 위해 예약되어 있습니다.

다른 특수 파일 이름은 실행중인 gawk 프로세스에 대한 정보에 대한 액세스를 제공합니다. 이 파일 이름은 이제 폐기되었습니다. 그들이 제공하는 정보를 얻으려면 PROCINFO 배열을 사용하십시오. 파일 이름은 다음과 같습니다.

/ dev / pid

이 파일을 읽으면 현재 프로세스의 프로세스 ID가 10 진수로 리턴되고 개행 문자로 종료됩니다.

/ dev / ppid

이 파일을 읽으면 현재 프로세스의 상위 프로세스 ID (10 진수)가 개행 문자로 종료됩니다.

/ dev / pgrpid

이 파일을 읽으면 현재 프로세스의 프로세스 그룹 ID가 10 진수로 리턴되고 개행 문자로 종료됩니다.

/ dev / user

이 파일을 읽으면 개행 문자로 끝나는 단일 레코드가 반환됩니다. 필드는 공백으로 구분됩니다. $ 2getuid (2) 시스템 호출의 값이고, $ 2geteuid (2) 시스템 호출의 값이며, $ 3getgid (2) 시스템 호출의 값이고 $ 4getegid (2) 시스템 호출의 값입니다. 시스템 호출. 추가 필드가있는 경우 getgroups (2)에 의해 리턴 된 그룹 ID입니다. 여러 그룹이 모든 시스템에서 지원되지 않을 수 있습니다.

수치 함수

AWK에는 다음과 같은 내장 산술 기능이 있습니다.

atan2 ( y , x )

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

cos ( expr )

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

exp ( expr )

지수 함수.

int ( expr )

정수로 자릅니다.

로그 ( expr )

자연 대수 함수.

랜드()

0에서 1 사이의 난수를 반환합니다.

죄 ( expr )

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

sqrt ( expr )

제곱근 함수입니다.

srand ( [ expr ] )

expr 을 난수 생성기의 새로운 시드로 사용합니다. expr 이 제공되지 않으면, 시간이 사용됩니다. 반환 값은 난수 생성 프로그램의 이전 시드입니다.

문자열 함수

Gawk 에는 다음과 같은 내장 문자열 함수가 있습니다.

asort ( s [ , d ] )

소스 배열 s 의 요소 수를 반환합니다. s 의 내용은 값을 비교하기위한 gawk 의 일반 규칙을 사용하여 정렬되며 s의 정렬 된 값의 색인은 1부터 시작하는 순차적 정수로 대체됩니다. 선택적 대상 배열 d 가 지정된 경우 s 가 먼저 d 로 복제됩니다 , d 가 소트되어 소스 배열 인덱스는 변경되지 않게됩니다.

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

대상 문자열 t 에서 정규 표현식 r 과 일치하는 항목을 검색하십시오. hg 또는 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 () 대체 텍스트의 & 와 백 슬래시 규칙에 대한 자세한 설명은 GAWK : Effective AWK Programming 을 참조하십시오.

인덱스 ( s , t )

캐릭터 라인 s 의 캐릭터 라인 t 의 인덱스를 돌려줍니다. t 가 존재하지 않는 경우는 0을 돌려줍니다. (이것은 문자 인덱스가 하나에서 시작한다는 것을 의미합니다.)

길이 ( [ s ] )

문자열 s 의 길이 또는 s 가 제공되지 않은 경우 $ 0 길이를 리턴합니다 .

match ( s , r [ , a ] )

정규 표현식 r 이있는 s 의 위치를 ​​반환하거나 r 이 없으면 0을 반환 하고 RSTARTRLENGTH 의 값을 설정합니다. 인수의 순서는 ~ 연산자 : str ~ re와 같습니다 . 배열 a 가 제공되면 a 가 지워지고 요소 1부터 n 까지는 r의 괄호 안에있는 대응하는 부분 식과 일치하는 s 의 부분으로 채워집니다. 0 번째 요소는 정규 표현식 r 전체와 일치하는 부분을 포함합니다.

split ( s , a [ , r ] )

문자열 s 를 일반 표현식 r 의 배열 a 로 분할하고 필드 수를 반환합니다. r 을 생략하면 대신 FS 가 사용됩니다. 배열 a 가 먼저 지워집니다. 분할은 위에서 설명한 필드 분할과 동일하게 작동합니다.

sprintf ( fmt , expr-list )

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

strtonum ( str )

str을 검사하여 숫자 값을 반환합니다. str 이 선행 0으로 시작하면 strtonum ()str 이 8 진수라고 가정합니다. str 이 선행 0x 또는 0X로 시작하면 strtonum ()str 이 16 진수라고 가정합니다.

sub ( r , s [ , t ] )

gsub () 과 같지만 처음으로 일치하는 부분 문자열 만 바뀝니다.

substr ( s , i [ , n ] )

i 에서 시작하는 s의 최대 n 문자의 하위 문자열을 반환합니다. n 을 생략하면 나머지 s 가 사용됩니다.

tolower ( str )

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

toupper ( str )

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

시간 함수

AWK 프로그램의 주요 용도 중 하나는 타임 스탬프 정보가 포함 된 로그 파일을 처리하기 때문에 gawk 는 타임 스탬프를 얻고 형식을 지정하기 위해 다음과 같은 기능을 제공합니다.

mktime ( datespec )

datespec을 systime ()이 리턴 한 것과 같은 형식의 시간 소인으로 습니다. datespecYYYY MM DD HH MM SS [DST] 형식 의 문자열입니다. 문자열의 내용은 세기를 포함하는 전체 연도, 1에서 12 사이의 월, 1에서 31 사이의 날짜, 0에서 23 사이의 시간, 0에서 1의 분을 나타내는 6 또는 7 개의 숫자입니다. 59, 두 번째는 0에서 60 사이의 숫자와 선택적 일광 절약 플래그가 있습니다. 이 숫자의 값은 지정된 범위 내에있을 필요는 없습니다. 예를 들어, 1 시간은 자정 1 시간 전을 의미합니다. 기원 0의 그레고리오 력이 있다고 가정합니다. 연도 0은 전년도 1, 해 -1은 전년도 0입니다. 시간은 현지 시간대로 가정됩니다. 일광 절약 플래그가 양수이면 시간은 일광 절약 시간으로 간주됩니다. 0 일 경우 시간은 표준 시간으로 간주됩니다. 음수 (기본값) 인 경우 mktime () 은 일광 절약 시간이 지정된 시간 동안 유효한지 여부를 확인하려고 시도합니다. datespec에 충분한 요소가 없거나 결과 시간이 범위를 벗어난 경우 mktime () 은 -1을 반환합니다.

strftime ( [ format [ , timestamp ]] )

형식에 따라 사양에 따라 타임 스탬프형식화합니다. 타임 스탬프systime ()이 반환 한 것과 같은 형식이어야합니다. 시간 소인 이 누락되면 현재 시간이 사용됩니다. 형식 이없는 경우, date (1)의 출력과 동일한 기본 형식이 사용됩니다. 사용할 수있는 형식 변환에 대해서는 ANSI C에서 strftime () 함수에 대한 스펙을 참조하십시오. 공개 도메인 버전의 strftime (3)과 그것에 대한 man 페이지는 gawk로 제공됩니다 ; 해당 버전을 사용하여 gawk 을 빌드 한 경우 해당 man 페이지에 설명 된 모든 변환을 gawk에서 사용할 수 있습니다 .

systime ()

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

비트 조작 함수

gawk 버전 3.1부터는 다음과 같은 비트 조작 함수를 사용할 수 있습니다. 그들은 배정도 부동 소수점 값을 부호없는 long 정수로 변환하고 작업을 수행 한 다음 그 결과를 다시 부동 소수점으로 변환합니다. 함수는 다음과 같습니다.

및 ( v1 , v2 )

v1v2가 제공하는 값의 비트 AND를 반환합니다.

compl ( val )

val 의 비트 보수를 돌려줍니다.

lshift ( val , count )

val 의 값을 count 비트만큼 왼쪽으로 쉬프트 해 돌려줍니다.

또는 ( v1 , v2 )

v1v2가 제공하는 값의 비트 OR을 반환합니다.

rshift ( val , count )

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

xor ( v1 , v2 )

v1v2가 제공하는 값의 비트 XOR을 반환합니다.

국제화 함수

gawk 버전 3.1부터 런타임시 문자열 변환을 위해 AWK 프로그램 내에서 다음 함수를 사용할 수 있습니다. 자세한 내용은 GAWK : Effective AWK Programming을 참조하십시오.

bindtextdomain ( 디렉토리 [ , 도메인 ] )

gawk.mo 파일을 찾을 디렉토리를 지정합니다 (예 : 테스트 중). "표준"위치에 배치 할 수 없거나 배치 할 수없는 경우. 도메인 이``바운드 (bound) 된 디렉토리를 반환한다.

기본 도메인TEXTDOMAIN 의 값입니다. directory 가 공백 문자열 ( "" )이면 bindtextdomain () 은 주어진 도메인에 대한 현재 바인딩을 반환 합니다 .

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

로케일 범주 범주에 대한 텍스트 도메인 도메인string 변환을 리턴합니다. domain 의 기본값은 TEXTDOMAIN 의 현재 값입니다. category 의 기본값은 "LC_MESSAGES" 입니다.

category에 값을 제공하면 GAWK : Effective AWK Programming에 설명 된 알려진 로케일 범주 중 하나와 같은 문자열이어야합니다. 또한 텍스트 도메인을 제공해야합니다. 현재 도메인을 사용하려면 TEXTDOMAIN 을 사용하십시오.

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

로켈 범주 범주에 대한 텍스트 도메인 도메인 에서 string1string2 의 변환 에 사용되는 복수형을 반환합니다. domain 의 기본값은 TEXTDOMAIN 의 현재 값입니다. category 의 기본값은 "LC_MESSAGES" 입니다.

category에 값을 제공하면 GAWK : Effective AWK Programming에 설명 된 알려진 로케일 범주 중 하나와 같은 문자열이어야합니다. 또한 텍스트 도메인을 제공해야합니다. 현재 도메인을 사용하려면 TEXTDOMAIN 을 사용하십시오.

사용자 정의 기능

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

함수 이름 ( 매개 변수 목록 ) { 명령문 }

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

함수는 원래 AWK 언어의 일부가 아니기 때문에 로컬 변수에 대한 규정은 다소 번거롭기 때문에 매개 변수 목록에서 추가 매개 변수로 선언됩니다. 규칙은 매개 변수 목록에서 여분의 공백을 사용하여 실제 매개 변수에서 지역 변수를 분리하는 것입니다. 예 :

함수 f (p, q, a, b) # a와 b는 로컬 {...} / abc / {...; f (1, 2); ...}

함수 호출에서 왼쪽 괄호는 공백을 끼지 않고 함수 이름 바로 뒤에 있어야합니다. 이것은 연결 연산자와의 구문 모호성을 피하기위한 것입니다. 이 제한은 위에 나열된 내장 함수에는 적용되지 않습니다.

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

함수에서 값을 반환하려면 return expr 을 사용하십시오. 값을 제공하지 않으면 반환 값은 정의되지 않거나 함수가 끝에 떨어지면 반환됩니다.

--lint 가 제공되면 gawk 는 런타임이 아닌 구문 분석시 정의되지 않은 함수에 대한 호출에 대해 경고합니다. 런타임에 정의되지 않은 함수를 호출하면 심각한 오류가 발생합니다.

function 대신 func 라는 단어를 사용할 수 있습니다.

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

gawk 버전 3.1부터는 실행중인 gawk 인터프리터에 새로운 내장 함수를 동적으로 추가 할 수 있습니다. 전체 내용은이 매뉴얼 페이지의 범위를 벗어납니다. 자세한 내용은 GAWK : Effective AWK Programming 을 참조하십시오.

확장 ( 객체 , 함수 )

object에 의해 명명 된 공유 객체 파일을 동적으로 연결하고 해당 객체에서 function 을 호출하여 초기화를 수행합니다. 이들은 모두 문자열로 제공되어야합니다. 함수가 반환 한 값을 반환 합니다 .

이 기능은 GAWK : Effective AWK Programming 에서 제공되고 문서화되어 있지만,이 기능에 관한 모든 것은 다음 릴리스에서 변경 될 가능성이 있습니다. 우리는 당신이 다시 할 의향이없는 것에는이 기능을 사용하지 말 것을 적극 권장합니다.

신호

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

사용 예

모든 사용자의 로그인 이름을 인쇄하고 정렬하십시오. BEGIN {FS = ":"} {print $ 1 | {print FNR, $ 0} 연결 번호와 행 번호 (테마의 변형) : {print NR, $ n } 파일의 줄 수를 세는 경우 : {nlines ++} END {print nlines} $ 0}

국제화

문자열 상수는 큰 따옴표로 묶인 문자의 시퀀스입니다. 비영어권 환경에서는 AWK 프로그램의 문자열을 원시 자연 언어로 변환해야한다고 표시 할 수 있습니다. 이러한 문자열은 AWK 프로그램에서 앞에 밑줄 ( "_")이 표시됩니다. 예를 들어,

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

항상 안녕하세요, 세계를 인쇄합니다. 그러나,

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

프랑스어로 몽드 를 인쇄 할 수도 있습니다.

지역화 가능한 AWK 프로그램을 생성하고 실행하는 데는 몇 가지 단계가 필요합니다.

1.

BEGIN 조치를 추가하여 TEXTDOMAIN 변수에 값을 지정하여 텍스트 도메인을 프로그램과 연관된 이름으로 설정하십시오.


BEGIN {TEXTDOMAIN = "myprog"}

이렇게하면 gawk 가 프로그램과 관련된 .mo 파일을 찾을 수 있습니다. 이 단계가 없으면 gawk 는 프로그램의 번역을 포함하지 않는 메시지 텍스트 도메인을 사용합니다.

2.

선행 밑줄로 번역해야하는 모든 문자열을 표시하십시오.

삼.

필요한 경우 프로그램에서 dcgettext () 및 / 또는 bindtextdomain () 함수를 사용하십시오.

4.

gawk --gen-po -f myprog.awk> myprog.po 를 실행하여 프로그램에 대한 .po 파일을 생성하십시오.

5.

적절한 번역을 제공하고 해당 .mo 파일을 작성하고 설치하십시오.

국제화 기능은 GAWK : Effective AWK Programming에 자세히 설명되어 있습니다.

Posix 호환성

gawk의 가장 중요한 목표는 POSIX 표준 및 UNIX awk 의 최신 버전과의 호환성입니다. 이를 위해 gawk 는 AWK 서적에 설명되어 있지 않지만 awk 의 Bell Laboratories 버전의 일부이며 POSIX 표준에 따라 다음과 같은 사용자 가시적 기능을 통합합니다.

이 책은 awkBEGIN 블록이 실행 된 후에 인수를 파일로 열 때 명령 행 변수 할당이 발생 함을 나타냅니다. 그러나 이전 구현에서 파일 이름 앞에 이러한 할당이 있으면 BEGIN 블록을 실행 하기 전에 할당이 수행됩니다. 응용 프로그램은이 "기능"에 의존하게되었습니다. awk 가 설명서와 일치하도록 변경되면 프로그램 실행 전에 변수를 지정하기위한 -v 옵션이 추가되어 이전 동작에 의존하는 응용 프로그램을 수용 할 수 있습니다. (이 기능은 Bell Laboratories와 GNU 개발자가 합의한 것입니다.)

구현 특정 기능을위한 -W 옵션은 POSIX 표준에 있습니다.

인수를 처리 할 때 gawk 는 특수 옵션``- ''를 사용하여 인수의 끝을 알립니다. 호환 모드에서는 경고를 표시하지만 정의되지 않은 옵션은 무시합니다. 정상적인 동작에서 이러한 인수는 AWK 프로그램으로 전달되어 처리됩니다.

AWK 책은 srand () 의 반환 값을 정의하지 않습니다. POSIX 표준은 난수 시퀀스를 추적 할 수 있도록 사용하고있는 시드를 반환합니다. 따라서 gawk의 srand () 는 현재 시드를 반환합니다.

다른 새로운 기능은 다음과 같습니다. 다중 -f 옵션 사용 (MKS awk에서 ). ENVIRON 배열; \ a\ v 이스케이프 시퀀스 (원래 gawk로 끝나고 Bell Laboratories 버전으로 다시 제공됨 ). tolower ()toupper () 내장 함수 (Bell Laboratories 버전) ANSI C 변환 사양은 printf (Bell Laboratories 버전에서 처음 수행됨)에 나와 있습니다.

역사적 특징

gawk가 지원하는 역사적인 AWK 구현의 두 가지 기능이 있습니다. 첫째, 인자없이 인자를 가질뿐만 아니라 괄호 없이도 length () 내장 함수를 호출 할 수 있습니다! 그러므로,

길이 = 신성 Algol 60, Batman!

다음 중 어느 것과도 같습니다.

a = 길이 ()
a = 길이 ($ 0)

이 기능은 POSIX 표준에서``사용되지 않음 ''으로 표시되어 gawk--lint 가 명령 행에 지정된 경우 사용에 대한 경고를 발행합니다.

또 다른 기능은 while , for 또는 do 루프 본문 외부에서 continue 또는 break 문을 사용하는 것입니다. 전통적인 AWK 구현은 다음 구문과 동일한 사용법을 처리했습니다. Gawk--traditional 이 지정되면이 사용법을 지원합니다.

GNU 확장

Gawk 는 POSIX awk에 대한 많은 확장 기능을 제공합니다. 이 절에서 설명합니다. --traditional 옵션과 함께 gawk 를 호출하면 여기에 설명 된 모든 확장 기능을 비활성화 할 수 있습니다.

POSIX awk 에서는 gawk 의 다음 기능을 사용할 수 없습니다.

*

-f 옵션을 통해 명명 된 파일에 대해서는 경로 검색이 수행되지 않습니다. 따라서 AWKPATH 환경 변수는 특별하지 않습니다.

*

\ x 이스케이프 시퀀스. ( --posix로 비활성화되었습니다.)

*

fflush () 함수. ( --posix로 비활성화되었습니다.)

*

후에 라인을 계속할 수 있습니까?: . ( --posix로 비활성화되었습니다.)

*

AWK 프로그램의 8 진수 및 16 진수

*

ARGIND , BINMODE , ERRNO , LINT , RTTEXTDOMAIN 변수는 특별하지 않습니다.

*

IGNORECASE 변수 및 그 부작용은 사용할 수 없습니다.

*

FIELDWIDTHS 변수 및 고정 폭 필드 분할.

*

PROCINFO 배열을 사용할 수 없습니다.

*

RS 를 정규 표현식으로 사용합니다.

*

I / O 리디렉션에 사용할 수있는 특수 파일 이름이 인식되지 않습니다.

*

보조 프로세스를 생성하기위한 & 연산자.

*

null 문자열을 FS 의 값으로 사용하고 split () 의 세 번째 인수로 개별 문자를 분할하는 기능.

*

close () 함수에 대한 선택적인 두 번째 인수.

*

match () 함수에 대한 선택적인 세 번째 인수.

*

printfsprintf ()에서 위치 지정자를 사용할 수있는 기능.

*

delete 배열 을 사용하여 배열 의 전체 내용을 삭제합니다.

*

nextfile 을 사용하여 현재 입력 파일의 처리를 중단 합니다.

*

strftime () , strtonum () , systime () , strftime () , strftime () , strftime ()strtonum ()xor () 함수를 호출합니다.

*

현지화 가능 문자열.

*

extension () 함수로 새로운 내장 함수를 동적으로 추가.

AWK 책은 close () 함수의 반환 값을 정의하지 않습니다. Gawkclose () 는 각각 출력 파일이나 파이프를 닫을 때 fclose (3) 또는 pclose (3)에서 값을 반환합니다. 입력 파이프를 닫을 때 프로세스의 종료 상태를 반환합니다. 명명 된 파일, 파이프 또는 공동 프로세스가 리디렉션으로 열리지 않은 경우 반환 값은 -1입니다.

gawk--traditional 옵션과 함께 호출 될 때, -F 옵션에 대한 fs 인수가``t ''이면, FS 는 탭 문자로 설정됩니다. gawk -F \ t ... 를 입력하면 쉘이``t ''를 인용하기 만하고 -F 옵션에는`\ t ''을 전달하지 않습니다. 이것은 다소 추악한 특수한 경우이므로 기본 동작이 아닙니다. --posix 가 지정된 경우 에도이 문제 가 발생하지 않습니다. 탭 문자를 필드 구분 기호로 사용하려면 gawk -F '\ t'...와 같이 작은 따옴표를 사용하는 것이 가장 좋습니다.

다른 명령을보십시오 : wait , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , talk , motd , free , lpr , execl , fdisk , at , who , iwconfig , ifconfig , vgdisplay , open , lsmod , ntohs , mailq , kill , wtmp