이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 awkposix 명령입니다.
프로그램:
이름
awk — 패턴 스캔 및 처리 언어
개요
AWK [-F XNUMX월 스트링] [-v 할당]... 프로그램 [논의...]
AWK [-F XNUMX월 스트링] -f 프로그램 파일 [-f 프로그램 파일]... [-v 할당]...
[논의...]
기술
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 유틸리티는 다음과 같이 작성된 프로그램을 실행해야 합니다. AWK 프로그래밍 언어, 즉
텍스트 데이터 조작에 특화되어 있습니다. 안 AWK 프로그램은 일련의 패턴이며
해당 조치. 패턴과 일치하는 입력을 읽으면 관련 작업이 수행됩니다.
해당 패턴으로 수행됩니다.
입력은 일련의 기록으로 해석되어야 합니다. 기본적으로 레코드는 한 줄입니다.
종료 중 하지만 이는 다음을 사용하여 변경할 수 있습니다. RS 내장 변수. 각
입력 기록은 프로그램의 각 패턴에 대해 차례로 일치되어야 합니다. 각각
패턴이 일치하면 관련 작업이 실행됩니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 유틸리티는 각 입력 레코드를 일련의 필드로 해석해야 합니다.
기본적으로 필드는 비 문자열입니다. 비 문자. 이 기본값
그리고 필드 구분 기호는 다음을 사용하여 변경할 수 있습니다. FS 내장 변수 또는 -F
XNUMX월 스트링 선택권. 그만큼 AWK 유틸리티는 $1 레코드의 첫 번째 필드를 나타내고 두 번째 필드는
2달러 등등. $0 기호는 전체 기록을 나타냅니다. 다른 필드 설정
$0의 재평가가 발생합니다. $0에 할당하면 다른 모든 필드의 값이 재설정됩니다.
그리고 NF 내장 변수.
옵션
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 유틸리티는 POSIX.1-2008의 기본 정의 볼륨을 준수해야 합니다. 섹션
12.2, 유틸리티 통사론 가이드 라인.
다음 옵션이 지원됩니다.
-F XNUMX월 스트링
입력 필드 구분자를 정의합니다. 이 옵션은 다음과 동일합니다.
-v FS =XNUMX월 스트링
경우를 제외하고 -F XNUMX월 스트링 and -v FS =XNUMX월 스트링 둘 다 사용되며 지정되지 않았습니다.
여부 FS 다음으로 인한 할당 -F XNUMX월 스트링 명령으로 처리됩니다
라인 주문 또는 마지막 주문 이후에 처리됨 -v FS =XNUMX월 스트링. 설명을 참조하십시오
의 FS 내장 변수 및 사용 방법은 확장된 설명에서 확인하세요.
안내
-f 프로그램 파일
파일의 경로 이름을 지정하십시오. 프로그램 파일 포함 AWK 프로그램. 경로명
of '-' 표준 입력을 나타냅니다. 이 옵션의 인스턴스가 여러 개인 경우
지정된 파일의 연결은 다음과 같습니다. 프로그램 파일 순서대로
지정된 것은 AWK 프로그램. 그만큼 AWK 프로그램은 대안으로 될 수 있습니다
명령줄에 단일 인수로 지정됩니다.
-v 할당
애플리케이션은 다음을 보장해야 합니다. 할당 주장은 다음과 같은 형식이다.
an 할당 피연산자. 지정된 변수 할당은 이전에 발생해야 합니다.
실행 AWK 프로그램과 관련된 작업을 포함하여 BEGIN 패턴
(만약에 어떠한). 이 옵션은 여러 번 발생하도록 지정할 수 있습니다.
피연산자
다음 피연산자가 지원됩니다.
프로그램 없는 경우 -f 옵션이 지정되면 첫 번째 피연산자가 AWK 의 텍스트가 될 것이다
AWK 프로그램. 응용프로그램은 다음을 제공해야 합니다. 프로그램 단일 피연산자
인수 AWK. 텍스트가 다음으로 끝나지 않는 경우 , AWK 해석할 것이다
텍스트는 그랬던 것처럼.
논의 다음 두 가지 유형 중 하나 논의 혼합될 수 있습니다:
파일 읽을 입력이 포함된 파일의 경로 이름입니다.
프로그램의 패턴 세트와 일치합니다. 그렇지 않은 경우 파일
피연산자가 지정되거나 파일 피연산자는 '-'표준
입력을 사용해야 합니다.
할당
로 시작하는 피연산자 또는 알파벳 문자
이식 가능한 문자 집합에서(기본 정의의 표 참조)
POSIX.1-2008의 볼륨, 섹션 6.1, 휴대용 충전 케이스 캐릭터 세트), 팔로우
밑줄, 숫자, 알파벳의 순서로
이식 가능한 문자 세트 다음에 '=' 문자는 다음을 지정해야 합니다.
경로 이름이 아닌 변수 할당. 앞의 인물들은
'=' 의 이름을 표현하다 AWK 변하기 쉬운; 그 이름이 AWK
예약어(참조 문법) 동작이 정의되지 않았습니다. 캐릭터
다음 나타난 것으로 해석됩니다.
인간을 AWK 프로그램 앞과 뒤에 큰따옴표('"')
캐릭터로서 STRING 토큰(참조 문법), 단, 마지막인 경우는 제외
문자는 이스케이프되지 않았습니다. , 다음과 같이 해석된다.
오자 시퀀스의 첫 번째 문자가 아닌
"\"". 변수에는 해당 값이 할당됩니다. STRING 토큰
그리고 적절한 경우 다음으로 간주됩니다. 숫자 현 (참조
식 in AWK), 변수에는 숫자도 할당되어야 합니다.
값. 이러한 각 변수 할당은 변수 직전에 발생해야 합니다.
다음 처리 파일, 만약에 어떠한. 그래서 이전에 과제를
첫번째 파일 인수는 다음 이후에 실행됩니다. BEGIN 작업(만약
모두), 마지막 이후의 할당 동안 파일 논쟁이 일어날 것이다
이전 END 작업(있는 경우). 없는 경우 파일 인수,
할당은 표준 입력을 처리하기 전에 실행되어야 합니다.
STDIN
표준 입력은 그렇지 않은 경우에만 사용됩니다. 파일 피연산자가 지정되거나 파일
피연산자는 '-', 또는 프로그램 파일 옵션 인수는 '-'; 입력 파일 섹션을 참조하세요. 만약에
전에, AWK 프로그램에는 작업이나 패턴이 포함되어 있지 않지만 그 외에는 유효합니다. AWK 프로그램,
표준 입력 및 기타 파일 피연산자를 읽을 수 없으며 AWK 리턴으로 종료됩니다
제로 상태.
입력 파일
파일을 입력하세요. AWK 다음 소스 중 하나의 프로그램은 텍스트 파일이어야 합니다.
* 어느 파일 피연산자 또는 그와 동등한 것, 수정하여 달성 AWK 변수 ARRGV
and ARGC
* 표준 입력이 없는 경우 파일 피연산자
*에 대한 주장 Getline 기능
변수 여부 RS 이외의 값으로 설정되어 있습니다. 여부는 이 파일의 경우
구현은 지정된 구분 기호로 종료되는 레코드를 지원해야 합니다.
{LINE_MAX}바이트이며 더 긴 레코드를 지원할 수 있습니다.
If -f 프로그램 파일 지정되면 응용 프로그램은 각 파일의 이름이 지정되었는지 확인해야 합니다.
전에, 프로그램 파일 옵션 인수는 다음과 같은 순서로 된 텍스트 파일과 해당 연결입니다.
그들은 인수에 나타납니다, AWK 프로그램)
환경 변수
다음 환경 변수는 실행에 영향을 미칩니다. AWK:
랑 설정되지 않은 국제화 변수에 대한 기본값을 제공하거나
없는. (POSIX.1-2008의 기본 정의 볼륨을 참조하십시오. 섹션 8.2,
국제화 변수 국제화를 위해
로케일 범주의 값을 결정하는 데 사용되는 변수)
LC_ALL 비어 있지 않은 문자열 값으로 설정된 경우 다른 모든 값을 재정의합니다.
국제화 변수.
LC_COLLATE
범위, 등가 클래스 및 다중 동작의 로케일 결정
정규식 내의 문자 조합 요소 및 비교
문자열 값.
LC_CTYPE 텍스트 데이터의 바이트 시퀀스 해석을 위한 로케일 결정
문자로(예: 다중 바이트 문자가 아닌 단일 바이트
인수 및 입력 파일), 일반 내에서 문자 클래스의 동작
표현, 문자를 문자로 식별, 매핑
대문자와 소문자 토퍼 and 낮추다 기능.
LC_메시지
의 형식과 내용에 영향을 주는 데 사용해야 하는 로케일을 결정합니다.
표준 오류에 기록된 진단 메시지.
LC_숫자
숫자 입력을 해석할 때 사용되는 기수 문자를 결정합니다.
숫자와 문자열 값 간의 변환 및 숫자 출력 형식 지정.
지역에 상관없이, 문자(소수점 문자
POSIX 로캘)은 처리 시 인식되는 소수점 문자입니다. AWK
프로그램(명령줄 인수의 할당 포함)
NLS경로 처리를 위한 메시지 카탈로그의 위치를 결정합니다. LC_메시지.
PATH 다음에 의해 실행된 명령을 찾을 때 검색 경로를 결정합니다. 체계(특급), 또는
입력 및 출력 파이프; POSIX.1‐2008의 기본 정의 볼륨을 참조하세요. 장
8, 환경 변수.
또한 모든 환경 변수는 다음을 통해 표시됩니다. AWK 변수 환경.
비동기 이벤트
기본.
표준 출력
출력 파일의 성격은 다음에 따라 다릅니다. AWK 프로그램)
STDERR
표준 오류는 진단 메시지에만 사용해야 합니다.
출력 파일
출력 파일의 성격은 다음에 따라 다릅니다. AWK 프로그램)
확장 기술
사무용 겉옷 프로그램 Structure
An AWK 프로그램은 다음 형식의 쌍으로 구성됩니다.
무늬 { 동작 }
패턴이나 동작(둘러싸는 중괄호 문자 포함)은 다음과 같습니다.
생략.
누락된 패턴은 입력 기록과 일치해야 하며 누락된 작업은
다음과 동일 :
{ 인쇄 }
실행 AWK 프로그램은 먼저 다음과 관련된 작업을 실행하여 시작됩니다.
모든 BEGIN 프로그램에서 나타나는 순서대로 패턴을 만듭니다. 그러면 각각 파일 피연산자(또는
파일이 지정되지 않은 경우 표준 입력)은 다음에서 데이터를 읽어 차례로 처리됩니다.
레코드 구분 기호가 나타날 때까지 파일을 삭제합니다( 기본적으로). 첫 번째 전에
레코드의 필드에 대한 참조가 평가되면 레코드는 필드로 분할되어야 합니다.
의 규칙에 따라 정규병 식, 값을 사용하여 FS 그건 현재 시간이었어
기록을 읽은 시간. 그런 다음 프로그램의 각 패턴은 다음에서 평가됩니다.
발생 순서, 현재 패턴과 일치하는 각 패턴과 관련된 작업
기록이 실행되었습니다. 일치하는 패턴에 대한 작업은 평가 전에 실행되어야 합니다.
후속 패턴. 마지막으로, 모든 것과 관련된 행동 END 패턴은
프로그램에서 발생한 순서대로 실행됩니다.
식 in AWK
표현식은 다음에 사용되는 계산을 설명합니다. 패턴 and 행위. 다음 표에서는
유효한 표현식 연산은 우선순위가 가장 높은 것부터 가장 낮은 것 순으로 그룹별로 제공됩니다.
우선 순위는 마지막으로 동일 우선 순위 연산자는 수평선 사이에 그룹화됩니다. ~ 안에
문법이 공식적으로 모호한 표현 평가, 우선 순위가 높음
연산자는 우선순위가 낮은 연산자보다 먼저 평가되어야 합니다. 이 테이블에는 특급, expr1,
expr2및 expr3 모든 표현식을 나타내고, lvalue는 다음과 같은 엔터티를 나타냅니다.
(즉, 할당 연산자의 왼쪽)에 할당됩니다. 정확한 구문
표현은 다음과 같습니다. 문법.
작업대 4 - 1 : 식 in 감소 상위 in AWK
┌─────────────────────┬────────────────────────┬─ ───────────────┬──────────────┐
│ 통사론 │ 성함 │ 타입 of 결과 │연관성 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│( 특급 ) │그룹화 │종류 특급 │해당 없음 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│$특급 │필드 참조 │문자열 │N/A │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│lvalue ++ │사후 증분 │숫자 │N/A │
│lvalue −− │사후 감소 │숫자 │N/A │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│++ lvalue │사전 증가 │숫자 │N/A │
│−− lvalue │사전 감소 │숫자 │N/A │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 ^ 특급 │지수화 │숫자 │오른쪽 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│! 특급 │논리적 아님 │숫자 │N/A │
│+ 특급 │단항 더하기 │숫자 │해당 없음 │
│− 특급 │단항 빼기 │숫자 │N/A │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 * 특급 │곱하기 │숫자 │왼쪽 │
│특급 / 특급 │구분 │숫자 │왼쪽 │
│특급 % 특급 │모듈러스 │숫자 │왼쪽 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 + 특급 │추가 │숫자 │왼쪽 │
│특급 - 특급 │뺄셈 │숫자 │왼쪽 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 특급 │문자열 연결 │문자열 │왼쪽 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 < 특급 │미만 │숫자 │없음 │
│특급 <= 특급 │작거나 같음 │숫자 │없음 │
│특급 != 특급 │같지 않음 │숫자 │없음 │
│특급 == 특급 │같음 │숫자 │없음 │
│특급 > 특급 │보다 큼 │숫자 │없음 │
│특급 >= 특급 │크거나 같음 │숫자 │없음 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 ~ 특급 │ERE 일치 │숫자 │없음 │
│특급 !~ 특급 │ERE 비일치 │숫자 │없음 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 배열 │배열 멤버쉽 │숫자 │왼쪽 │
│( 색인 ) in 정렬 │다차원 배열 │숫자 │왼쪽 │
│ │회원 │ │ │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 && 특급 │논리 AND │숫자 │왼쪽 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│특급 || 특급 │논리적 OR │숫자 │왼쪽 │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│expr1 ? expr2 : expr3│조건식 │선택 유형│오른쪽 │
│ │ │expr2 or expr3 │ │
├─────────────────────┼───────────────────────┼─ ───────────────┼──────────────┤
│l값 ^= 특급 │지수 할당│숫자 │오른쪽 │
│l값 %= 특급 │모듈러스 할당 │숫자 │오른쪽 │
│l값 *= 특급 │곱셈 할당│숫자 │오른쪽 │
│l값 /= 특급 │구분 할당 │숫자 │오른쪽 │
│l값 += 특급 │추가 할당 │숫자 │오른쪽 │
│l값 −= 특급 │뺄셈 할당 │숫자 │오른쪽 │
│l값 = 특급 │과제 │종류 특급 │오른쪽 │
└─────────────────────┴───────────────────────┴─ ───────────────┴──────────────┘
각 표현식에는 문자열 값, 숫자 값 또는 둘 다를 포함해야 합니다. 다음을 제외하고
특정 상황에 대해 명시된 경우 표현식의 값은 암시적으로 다음으로 변환됩니다.
사용되는 컨텍스트에 필요한 유형입니다. 문자열 값은 다음으로 변환됩니다.
다음에 의해 정의된 함수에 대한 다음 호출에 해당하는 숫자 값
ISO C 표준:
setlocale(LC_NUMERIC, "");
숫자_값 = 아토프(문자열_값);
또는 문자열의 초기 부분을 유형으로 변환하여 더블 다음과 같이 표현
다음과 같습니다 :
입력 문자열은 두 부분, 즉 비어 있을 수 있는 초기 시퀀스로 분해됩니다.
공백 문자(다음으로 지정됨) 아이스페이스()) 및 주제 순서
부동 소수점 상수로 해석됩니다.
주제 시퀀스의 예상 형식은 선택 사항입니다. '+' or '-' 서명한 다음
선택적으로 다음을 포함하는 비어 있지 않은 숫자 시퀀스 , 선택 사항
지수 부분. 지수 부분은 다음으로 구성됩니다. '이자형' or '이자형', 그 뒤에 선택사항
부호 다음에 하나 이상의 십진수가 옵니다.
첫 번째 숫자로 시작하는 시퀀스 또는 (먼저 발생하는 것)
C 언어의 부동 상수로 해석되며, 지수가 아닌 경우
부분도 아니고 나타납니다. 마지막 숫자 다음에 오는 것으로 가정됩니다.
끈. 주제 시퀀스가 빼기 기호로 시작하는 경우,
변환이 무효화됩니다.
정수 값과 정확히 동일한 숫자 값(참조: 섹션 1.1.2,
개념 파생 에 전에, ISO C 스탠다드)은 동등한 방법으로 문자열로 변환됩니다.
~에게 전화를 걸다 스프린트 기능(참조 끈 기능) 문자열로 "%디" 로 fmt
인수와 변환되는 숫자 값은 첫 번째이자 유일한 것입니다. 특급 논쟁. 어느
다른 숫자 값은 호출과 동일하게 문자열로 변환됩니다.
스프린트 변수의 값과 함수 CONVFMT 로 fmt 주장과
숫자 값은 처음이자 유일한 것으로 변환됩니다. 특급 논쟁. 결과는
값이 다음과 같은 경우 변환이 지정되지 않습니다. CONVFMT 부동 소수점 형식이 아닙니다.
사양. POSIX.1‐2008의 이 볼륨은 사이의 명시적인 변환을 지정하지 않습니다.
숫자와 문자열. 애플리케이션은 다음과 같이 표현식을 숫자로 처리하도록 강제할 수 있습니다.
여기에 XNUMX을 추가하거나 null을 연결하여 문자열로 처리되도록 강제할 수 있습니다.
끈 ("") 그것에.
문자열 값은 숫자 현 다음 중 하나에서 발생한 경우:
1. 필드 변수
2. 다음에서 입력 Getline() 함수
3. 파일 이름
4. ARRGV 배열 요소
5. 환경 배열 요소
6. 다음에 의해 생성된 배열 요소 분열() 함수
7. 명령줄 변수 할당
8. 다른 숫자형 문자열 변수에서 변수 할당
아래의 경우 (a) 또는 (b)에 해당하는 구현 종속 조건은 다음과 같습니다.
만났다.
ㅏ. ISO C에서 정의한 함수에 대한 다음 호출과 동등한 후
표준, 문자열_값_끝 다를 것이다 문자열_값및 그 이전의 모든 문자
종료 널 문자 문자열_값_끝 될 것이다 문자:
이륜 전차 *문자열_값_끝;
setlocale(LC_NUMERIC, "");
숫자_값 = strtod (문자열_값, &string_value_end);
비. 다음 변환이 모두 적용된 후 결과 문자열은 다음과 같습니다.
어휘적으로는 다음과 같이 인식됩니다. NUMBER 어휘 규칙에 설명된 토큰
문법:
-- 모든 선행 및 후행 문자는 폐기됩니다.
-- 첫 번째가 아닌 경우 ~이다 '+' or '-', 폐기됩니다.
-- 현재 로케일에서 소수점 문자가 나타날 때마다 변경됩니다.
에 .
(a)의 경우 숫자 값은 숫자 현 다음과 같은 값이 될 것입니다.
에 의해 반환 strtod() 부르다. (b)의 경우 첫 번째가 아닌 경우 ~이다 '-', 숫자
가치 숫자 현 인식된 숫자 값의 부정이어야 합니다.
NUMBER 토큰; 그렇지 않으면 숫자 값은 숫자 현 숫자가 될 것이다
인정받은 가치 NUMBER 토큰. 문자열이 a인지 아닌지 숫자 현 한다
이 섹션에서 해당 용어가 사용되는 맥락에서만 관련됩니다.
표현식이 부울 컨텍스트에서 사용될 때 숫자 값이 있으면
XNUMX은 false로 처리되고 다른 값은 true로 처리됩니다. 그렇지 않으면,
null 문자열의 문자열 값은 false로 처리되고 다른 값은 false로 처리됩니다.
사실로 취급됩니다. 부울 컨텍스트는 다음 중 하나입니다.
* 조건식의 첫 번째 하위 표현식
* 논리 NOT, 논리 AND 또는 논리 OR로 작동되는 표현식
* 두 번째 표현 for 성명서
* 의 표현 if 성명서
* 의 표현 동안 어느 쪽이든의 조항 동안 or do...동안 성명서
* 패턴으로 사용되는 표현 (전체 프로그램 구조에서와 같이)
모든 산술은 다음에 명시된 부동 소수점 산술의 의미를 따라야 합니다.
ISO C 표준(참조 섹션 1.1.2, 개념 파생 에 전에, ISO C 스탠다드).
표현식의 값:
expr1 ^ expr2
ISO C 표준 함수 호출에서 반환된 값과 동일합니다.
펑(expr1, expr2)
표현식:
l값 ^= 특급
ISO C 표준 표현과 동일합니다.
l값 = pow(l값, 특급)
단, lvalue는 한 번만 평가되어야 합니다. 표현식의 값:
expr1 % expr2
ISO C 표준 함수 호출에서 반환된 값과 동일합니다.
fmod(expr1, expr2)
표현식:
l값 %= 특급
ISO C 표준 표현과 동일합니다.
l값 = fmod(lvalue, 특급)
단, lvalue는 한 번만 평가되어야 합니다.
변수와 필드는 할당문에 의해 설정됩니다.
l값 = 표현
및 유형 표현 결과 변수 유형을 결정합니다. 과제
산술 할당을 포함합니다("+=", "−=", "*=", "/=", "%=", "^=", "++", "--") 모두
그 중 숫자 결과가 생성됩니다. 과제의 왼쪽 부분과
증가 및 감소 연산자의 대상은 변수, 인덱스가 있는 배열,
또는 필드 선택기.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 언어는 숫자나 문자열을 저장하는 데 사용되는 배열을 제공합니다. 배열
선언할 필요는 없습니다. 처음에는 비어 있으며 크기가 변경됩니다.
동적으로. 아래 첨자 또는 요소 식별자는 문자열이며 다음 유형을 제공합니다.
연관 배열 기능. 배열 이름과 대괄호 안의 아래 첨자
문법에 설명된 대로 lvalue로 사용될 수 있으므로 표현식으로 사용될 수 있습니다. 보다
문법. 아래 첨자가 없는 배열 이름은 다음 컨텍스트에서만 사용할 수 있습니다.
* 함수 정의 또는 함수 호출의 매개변수
* 이름 키워드 사용에 따른 토큰 in 문법에 명시된 대로 (참조
문법); 이 컨텍스트에서 사용된 이름이 배열 이름이 아닌 경우 동작은 다음과 같습니다.
정의되지 않은
유효한 배열 색인 하나 이상으로 구성됩니다. - 와 같은 분리된 표현
일부 프로그래밍 언어에서 다차원 배열을 색인화하는 방식.
때문에 AWK 배열은 실제로 XNUMX차원입니다. -분리된 목록은 다음과 같습니다.
별도의 문자열 값을 연결하여 단일 문자열로 변환됩니다.
표현식은 각각의 값으로 서로 구분됩니다. 서브셉 변하기 쉬운. 그래서
다음 두 가지 인덱스 작업은 동일합니다.
였다[expr1, expr2... 만료]
였다[expr1 서브셉 expr2 서브셉 ... 서브셉 만료]
응용프로그램은 다차원적인 것을 보장해야 합니다. 색인 와 함께 사용 in 연산자는
괄호 안에. 그만큼 in 특정 배열의 존재 여부를 테스트하는 연산자
요소가 해당 요소를 존재하게 해서는 안 됩니다. 존재하지 않는 배열에 대한 기타 참조
요소가 자동으로 생성됩니다.
비교( '<', "<=", "!=", "==", '>'및 ">=" 연산자)를 수행해야 합니다.
두 피연산자가 모두 숫자이면 숫자로, 하나는 숫자이고 다른 하나는 문자열이면
숫자 문자열인 값, 또는 하나는 숫자이고 다른 하나는 초기화되지 않은 경우
값. 그렇지 않으면 피연산자는 필요에 따라 문자열로 변환되고 문자열
비교는 로케일별 조합 순서를 사용하여 수행됩니다. 의 가치
비교 표현식은 관계가 참이면 1이고, 관계가 거짓이면 0입니다.
변수 and 이달의 스페셜 변수
변수는 AWK 이를 참조하여 프로그램을 작성합니다. 제외한
함수 매개변수(참조 사용자 정의 기능), 명시적으로 선언되지 않았습니다.
함수 매개변수 이름은 해당 함수에 대해 로컬이어야 합니다. 다른 모든 변수 이름은
글로벌. 함수 매개변수 이름과 이름으로 동일한 이름을 사용할 수 없습니다.
기능이나 특수 AWK 변하기 쉬운. 동일한 이름을 동시에 사용해서는 안 됩니다.
전역 범위의 변수 이름과 함수 이름입니다. 같은 이름은 안됩니다
동일한 범위 내에서 스칼라 변수와 배열로 사용됩니다. 초기화되지 않음
스칼라 변수, 배열 요소 및 필드 변수를 포함한 변수는
초기화되지 않은 값. 초기화되지 않은 값은 숫자 값 XNUMX과
빈 문자열의 문자열 값입니다. 초기화되지 않은 값을 가진 변수의 평가
문자열 또는 숫자는 사용되는 상황에 따라 결정됩니다.
필드 변수는 다음과 같이 지정됩니다. '$' 그 뒤에 숫자나 숫자 표현이 옵니다.
필드 번호의 효과 표현 음수가 아닌 다른 것으로 평가
정수가 지정되지 않았습니다. 초기화되지 않은 변수 또는 문자열 값은 다음으로 변환할 필요가 없습니다.
이 맥락에서 숫자 값. 새 필드 변수는 다음에 값을 할당하여 생성할 수 있습니다.
그들을. 존재하지 않는 필드에 대한 참조(즉, $ 이후의 필드)NF)는 다음과 같이 평가해야 합니다.
초기화되지 않은 값. 이러한 참조는 새 필드를 생성해서는 안 됩니다. 그러나
존재하지 않는 필드(예: $(NF+2)=5)의 값이 증가합니다. NF; 무엇이든 생성
초기화되지 않은 값이 있는 중간 필드; $0의 값은 다음과 같습니다.
필드가 다음 값으로 구분되어 다시 계산됩니다. FSO. 각 필드 변수
생성 시 문자열 값 또는 초기화되지 않은 값을 가져야 합니다. 필드 변수는 다음과 같습니다.
다음을 사용하여 $0에서 생성할 때 초기화되지 않은 값이 있습니다. FS 그리고 변수는 그렇지 않습니다
임의의 문자를 포함합니다. 해당하는 경우 필드 변수는 숫자로 간주됩니다.
문자열(참조 식 in AWK).
구현은 다음과 같이 설정되는 기타 특수 변수를 지원해야 합니다. AWK:
ARGC 의 요소 수 ARRGV 정렬.
ARRGV 옵션과 인수를 제외한 명령줄 인수 배열 프로그램 논의,
XNUMX부터 번호가 매겨진 ARGC−1.
의 인수 ARRGV 수정하거나 추가할 수 있습니다. ARGC 변경될 수 있습니다. 각각
입력 파일이 끝나고, AWK null이 아닌 다음 요소를 처리해야 합니다. ARRGV, 최대
현재 가치 ARGC−1(포함)을 다음 입력 파일의 이름으로 사용합니다. 따라서,
요소 설정 ARRGV null은 다음과 같이 처리되지 않음을 의미합니다.
입력 파일. 이름 '-' 표준 입력을 나타냅니다. 인수가 일치하는 경우
형식 할당 피연산자인 경우 이 인수는 다음과 같이 처리됩니다.
할당 오히려 파일 논의.
CONVFMT 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 printf 숫자를 문자열로 변환하는 형식(출력 제외)
명령문, 여기서 OFMT 사용); "%.6g" 기본적으로
환경 다음에 설명된 대로 환경의 값을 나타내는 배열입니다. 임원
POSIX.1‐2008의 시스템 인터페이스 볼륨에 정의된 함수입니다. 지수
배열은 환경 이름으로 구성된 문자열이어야 합니다.
변수이며 각 배열 요소의 값은 다음으로 구성된 문자열입니다.
해당 변수의 값. 해당하는 경우 환경 변수는 다음과 같습니다.
로 간주 숫자 현 (참조 식 in AWK); 배열 요소는
숫자 값도 있습니다.
행동이 나타나는 모든 경우에 AWK 환경변수의 영향을 받음
(모든 명령의 환경 포함 AWK 을 통해 실행 체계
기능을 사용하거나 파이프라인 리디렉션을 통해 인쇄 성명서, printf
진술, 또는 Getline 기능), 사용되는 환경은
당시의 환경 AWK 실행을 시작했습니다. 구현에 따라 정의됩니다
어떤 수정이든 환경 이 환경에 영향을 미칩니다.
파일 이름 현재 입력 파일의 경로 이름입니다. 내부 BEGIN 행동의 가치는
한정되지 않은. 내부 END 작업 값은 마지막 입력의 이름이 됩니다.
파일이 처리되었습니다.
FNR 현재 파일에 있는 현재 레코드의 서수입니다. 내부 BEGIN
조치 값은 XNUMX이 됩니다. 내부 END 행동의 가치는
처리된 마지막 파일에서 처리된 마지막 레코드의 번호입니다.
FS 입력 필드 구분 정규 표현식. ㅏ 기본적으로.
NF 현재 레코드의 필드 수입니다. 내부 BEGIN 액션, 활용 NF
다음이 아니면 정의되지 않습니다. Getline 없이 기능 였다 인수가 실행됨
이전에. 내부 END 조치, NF 마지막에 가졌던 가치를 유지합니다
이후에 리디렉션되지 않는 한 레코드 읽기, Getline 없이 기능 였다
인수는 입력하기 전에 수행됩니다. END 액션.
NR 입력 시작부터 현재 레코드의 서수입니다. 내부
BEGIN 조치 값은 XNUMX이 됩니다. 내부 END 행동의 가치는 다음과 같습니다
마지막으로 처리된 레코드의 번호입니다.
OFMT 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 printf 출력문에서 숫자를 문자열로 변환하는 형식(참조
산출 명세서); "%.6g" 기본적으로. 변환 결과는
값이 지정되지 않은 경우 OFMT 부동 소수점 형식 사양이 아닙니다.
FSO 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 인쇄 명령문 출력 필드 구분 기호; 기본적으로.
ORS 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 인쇄 명령문 출력 레코드 구분 기호; ㅏ 기본적으로.
길이 일치하는 문자열의 길이 일치 기능.
RS 문자열 값의 첫 번째 문자 RS 입력 레코드가 됩니다.
분리 기호; ㅏ 기본적으로. 만약에 RS 둘 이상의 문자가 포함된 경우
결과가 지정되지 않았습니다. 만약에 RS null이면 레코드가 시퀀스로 구분됩니다.
로 구성 게다가 하나 이상의 빈 줄(선행 또는 후행)
빈 줄은 시작이나 끝 부분에 빈 레코드가 있어서는 안 됩니다.
입력 및 무엇이든 상관없이 항상 필드 구분자가 되어야 합니다.
의 가치 FS 이다.
시작 일치하는 문자열의 시작 위치 일치 기능, 번호 매기기
1부터. 이는 항상 반환 값과 동일합니다. 일치
기능.
서브셉 다차원 배열의 아래 첨자 구분 문자열입니다. 기본값
구현에 의해 정의됩니다.
정규병 식
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 유틸리티는 확장된 정규식 표기법을 사용해야 합니다(기본
POSIX.1-2008의 정의 볼륨, 섹션 9.4, 확장 정규병 식) 그 외에는
특수 문자를 이스케이프 처리하기 위해 C 언어 규칙을 사용할 수 있습니다.
POSIX.1‐2008의 기본 정의 볼륨에 있는 표에 지정된 ERE,
장 5, 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 형성 표기법 ('\\', '\NS', '\NS', '\NS', '\N', '\NS', '\티', '\V')와
다음 표; 이러한 이스케이프 시퀀스는 내부와 외부 모두에서 인식되어야 합니다.
대괄호 표현. 레코드를 다음으로 구분할 필요는 없습니다. 캐릭터와
문자열 상수에는 다음이 포함될 수 있습니다. 문자, 그래서 심지어 "\엔" 시퀀스는 다음에서 유효합니다.
AWK ERE. 사용하여 ERE 내의 문자에는 다음과 같은 이스케이프가 필요합니다.
다음 표.
작업대 4 - 2 : 탈출 시퀀스 in AWK
┌─────────┬──────────────────────────────────┬── ─────────────────────────────────┐
│ 탈출 │ │ │
│순서 │ 상품 설명 │ 의미 │
├─────────┼──────────────────────────────────┼── ─────────────────────────────────┤
│\" │ │ 문자 │
├─────────┼──────────────────────────────────┼── ─────────────────────────────────┤
│\/ │ │ 문자 │
├─────────┼──────────────────────────────────┼── ─────────────────────────────────┤
│\ddd │ A 뒤따르는 문자 │ 인코딩이 │인 문자
│ │는 하나의 가장 긴 순서로, │는 하나, 둘 또는 │로 표시됩니다.
│ │ XNUMX자리 또는 XNUMX자리 XNUMX진수 │ XNUMX자리 XNUMX진수. 멀티 │
│ │ 문자(01234567). │ 바이트 문자가 모두 여러 개 필요한 경우 │
│ │ 숫자는 0입니다(즉, │ 연결된 이스케이프 시퀀스 │
│ │ NUL │ 이 유형의 표현(선행 포함) │
│ │ 문자), 동작은 │ 각 바이트마다. │
│ │ 정의되지 않았습니다. │ │
├─────────┼──────────────────────────────────┼── ─────────────────────────────────┤
│\c │ A 뒤따르는 문자 │ 정의되지 않음 │
│ │ │ │에 설명되지 않은 문자로
│ │ 이 표 또는 │ │의 표에
│ │ 기본 정의 볼륨 │ │
│ │ POSIX.1-2008, 장 5, 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 │ │
│ │ 형성 표기법 ('\\', '\NS', '\NS', │ │
│ │ '\NS', '\N', '\NS', '\티', '\V'). │ │
└─────────┴──────────────────────────────────┴── ─────────────────────────────────┘
다음 중 하나를 사용하여 정규식을 특정 필드나 문자열과 일치시킬 수 있습니다.
두 개의 정규식 일치 연산자, '~' and "!~". 이 연산자는 다음을 해석합니다.
오른쪽 피연산자는 정규 표현식이고 왼쪽 피연산자는 문자열입니다.
정규 표현식이 문자열과 일치하는 경우 '~' 표현식은 값으로 평가되어야 합니다.
1의, 그리고 "!~" 표현식은 0의 값으로 평가됩니다. (정규 표현식은
일치 작업은 기본 정의 볼륨에서 일치하는 용어로 정의됩니다.
POSIX.1-2008, 섹션 9.1, 정규병 표현 정의, 일치하는 항목이 있는 경우
정규식이 다음과 같이 제한되지 않는 한 문자열의 일부 또는
특수 문자.) 정규 표현식이 문자열과 일치하지 않는 경우
전에, '~' 표현식은 0의 값으로 평가되어야 하며, "!~" 표현식은 평가해야 한다
1의 값으로. 오른쪽 피연산자가 어휘 토큰 이외의 표현식인 경우
오히려, 표현식의 문자열 값은 확장 정규 표현식으로 해석됩니다.
위에서 설명한 이스케이프 규칙을 포함한 표현식입니다. 이와 동일한 탈출을 참고하세요.
문자열 리터럴의 값을 결정하는 데에도 규칙이 적용됩니다(
어휘 토큰 STRING), 따라서 문자열 리터럴이 다음과 같은 경우 두 번째로 적용됩니다.
이 맥락에서 사용됩니다.
때 오히려 토큰은 오른쪽이 아닌 다른 컨텍스트에서 표현식으로 나타납니다.
전에, '~' or "!~" 연산자 또는 아래 설명된 내장 함수 인수 중 하나로
결과 표현식의 값은 다음과 같습니다.
$0 " " /오히려/
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 오히려 인수 gsub, 일치, 이하 기능과 fs 인수 분열
기능(참조 끈 기능)은 확장 정규식으로 해석됩니다.
이는 다음 중 하나일 수 있습니다. 오히려 토큰 또는 임의의 표현으로 해석되어야 합니다.
오른쪽과 같은 방법으로 '~' or "!~" 연산자.
확장 정규식을 사용하면 문자열을 할당하여 필드를 구분할 수 있습니다.
내장 변수에 대한 표현식을 포함 FS, 직접적으로든 결과적으로든
사용의 -F XNUMX월 스트링 옵션. 기본값은 FS 변수는 단일이어야합니다
. 다음은 설명합니다 FS 행동:
1. 만약 FS null 문자열이면 동작이 지정되지 않습니다.
2. 만약 FS 단일 문자입니다.
ㅏ. 만약에 FS ~이다 , 선행 및 후행 건너뛰기 그리고 캐릭터;
필드는 하나 이상의 세트로 구분됩니다. 또는 문자.
비. 그렇지 않은 경우 FS 다른 캐릭터인가요? c, 필드는 각각으로 구분됩니다.
단일 발생 c.
3. 그렇지 않으면 문자열 값은 FS 정규직 연장으로 간주됩니다.
표현. 확장 정규식과 일치하는 시퀀스가 나타날 때마다
필드를 구분해야 합니다.
를 제외하고 '~' and "!~" 연산자와 gsub, 일치, 분열및 이하 내장
기능, ERE 매칭은 입력 기록을 기반으로 해야 합니다. 즉, 레코드 구분 기호입니다.
문자(변수 값의 첫 번째 문자 RS, 기본적으로)
표현식에 포함될 수 없으며 레코드 구분 기호와 일치하는 표현식이 없습니다.
성격. 레코드 구분자가 아닌 경우 , 에 포함된 문자
표현이 일치할 수 있습니다. 에 대한 '~' and "!~" 연산자, 그리고 그 네 가지 내장
함수, ERE 일치는 텍스트 문자열을 기반으로 합니다. 즉, 모든 문자(예:
및 레코드 구분 기호)가 패턴에 포함될 수 있으며 적절한
패턴은 모든 문자와 일치해야 합니다. 그러나 전체적으로 AWK ERE 매칭, 하나의 사용 또는
패턴, 입력 레코드 또는 텍스트 문자열에 NUL 문자가 많아지면 정의되지 않음이 생성됩니다.
결과.
패턴
A 무늬 유효한 것은 무엇입니까? 표현, 로 구분된 두 개의 표현식으로 지정된 범위
쉼표 또는 두 가지 특수 패턴 중 하나 BEGIN or END.
이달의 스페셜 패턴
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 유틸리티는 두 가지 특별한 패턴을 인식해야 합니다. BEGIN and END. 마다 BEGIN 무늬
한 번 일치하고 첫 번째 입력 레코드 이전에 관련 작업이 실행됩니다.
읽을 수 있습니다. 단, 다음을 사용하는 경우는 제외합니다. Getline 기능(참조 입력 / 출력 and 일반
기능) 이전에 BEGIN 작업 - 명령줄 할당이 완료되기 전입니다. 각 END
패턴은 한 번 일치해야 하며 관련 작업은 마지막 레코드 이후에 실행됩니다.
입력을 읽었습니다. 이 두 패턴에는 연관된 작업이 있어야 합니다.
BEGIN and END 다른 패턴과 결합하면 안 됩니다. 다수의 BEGIN and END 패턴은
허용됩니다. 다음과 관련된 작업 BEGIN 패턴은 순서대로 실행됩니다
프로그램에 지정된 것과 마찬가지로 END 행위. 안 END 패턴이 앞에 올 수 있습니다. BEGIN
프로그램의 패턴.
경우 AWK 프로그램은 패턴이 있는 동작으로만 구성됩니다. BEGIN및 BEGIN 동작
없음 Getline 기능, AWK 마지막 때 입력을 읽지 않고 종료됩니다.
마지막에 진술 BEGIN 작업이 실행됩니다. 만약 AWK 프로그램은 동작만으로 구성됩니다.
패턴으로 END 또는 패턴이 있는 작업만 수행 BEGIN and END, 입력은 다음과 같습니다
의 진술 전에 읽으십시오. END 작업이 실행됩니다.
표현 패턴
표현식 패턴은 부울 컨텍스트의 표현식인 것처럼 평가됩니다.
결과가 true이면 패턴이 일치하는 것으로 간주되며 관련 작업이 수행됩니다.
(있는 경우) 실행됩니다. 결과가 거짓이면 해당 작업은 실행되지 않습니다.
무늬 범위
패턴 범위는 쉼표로 구분된 두 개의 표현식으로 구성됩니다. 이 경우 조치는
첫 번째 표현식과 일치하는 항목 사이의 모든 레코드에 대해 수행됩니다.
두 번째 표현식의 다음 일치 항목을 포함합니다. 이 시점에서 패턴 범위는
일치하는 범위의 끝 이후의 입력 레코드부터 시작하여 반복됩니다.
행위
작업은 문법에 표시된 대로 일련의 명령문입니다. 문법. 어떤 단일
문은 중괄호로 묶인 문 목록으로 대체될 수 있습니다. 응용 프로그램
명령문 목록의 명령문이 다음으로 구분되도록 해야 합니다. 또는
문자. 명령문 목록의 명령문은 순서대로 순차적으로 실행됩니다.
그들이 나타난다는 것.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 표현 조건부로 작용 if 진술은 평가되어야하며, 만약
XNUMX이 아니거나 null이 아닌 경우 다음 명령문이 실행됩니다. 그렇지 않으면 만약에 그렇지 않으면 is
현재, 다음 진술 그렇지 않으면 처형된다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 if, 동안, do...동안, for , 하다및 계속 설명은 ISO C를 기반으로 합니다.
표준(참조 섹션 1.1.2, 개념 파생 에 전에, ISO C 스탠다드), 단,
부울 표현식은 다음에 설명된 대로 처리되어야 합니다. 식 in AWK, 그리고 다음을 제외하고
경우에:
for (변수 in 정렬)
반복하여 각각을 할당합니다. 색인 of 정렬 에 변수 지정되지 않은 순서로.
새로운 요소를 추가한 결과 정렬 그런 안에 for 루프가 정의되지 않았습니다. 만약
하다 or 계속 문이 루프 외부에서 발생하면 동작이 정의되지 않습니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 삭제 명령문은 개별 배열 요소를 제거해야 합니다. 따라서 다음 코드는
전체 배열을 삭제합니다.
for (색인 in 정렬)
삭제 배열[인덱스]
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 다음 것 명령문은 현재 입력 레코드의 모든 추가 처리를 수행해야 합니다.
버려진. 다음과 같은 경우 동작이 정의되지 않습니다. 다음 것 명령문이 나타나거나 호출됩니다. BEGIN
or END 액션.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 출구 진술은 모두를 호출해야합니다 END 작업이 발생한 순서대로 수행됩니다.
프로그램 소스를 입력한 다음 추가 입력을 읽지 않고 프로그램을 종료합니다. 안 출구
안의 진술 END 조치는 더 이상의 실행 없이 프로그램을 종료해야 합니다.
END 행위. 표현식이 출구 진술서의 숫자 값은 다음과 같습니다.
종료 상태가 되다 AWK, 후속 오류가 발생하거나 후속 오류가 발생하지 않는 한 출구
표현식이 포함된 명령문이 실행됩니다.
산출 명세서
모두 인쇄 and printf 명령문은 기본적으로 표준 출력에 기록됩니다. 출력
지정된 위치에 기록됩니다. 출력_리디렉션 하나가 공급되면
다음과 같습니다 :
> 표현
>> 표현
| 표현
모든 경우에 표현 로 사용되는 문자열을 생성하도록 평가됩니다.
쓸 경로 이름( '>' or ">>") 또는 실행할 명령으로(예: '|').
처음 두 가지 형식을 사용하여 해당 이름의 파일이 현재 열려 있지 않으면
열어서 필요한 경우 생성하고 첫 번째 형식을 사용하여 파일을 자릅니다. 출력
그런 다음 파일에 추가됩니다. 파일이 열려 있는 동안에는 후속 호출이
어느 표현 동일한 문자열 값으로 평가되면 단순히 출력을
파일. 파일은 다음 날짜까지 열려 있습니다. 가까운 기능(참조 입력 / 출력 and 일반
기능)는 동일한 문자열 값으로 평가되는 표현식과 함께 호출됩니다.
세 번째 형식은 명령 입력으로 파이프된 스트림에 출력을 기록합니다. 그만큼
현재 다음 값으로 열려 있는 스트림이 없으면 스트림이 생성됩니다. 표현 그것으로서
명령 이름. 생성된 스트림은 호출에 의해 생성된 스트림과 동일합니다.
Popen() POSIX.1‐2008의 시스템 인터페이스 볼륨에 다음 값으로 정의된 함수
표현 로 명령 인수 및 값 w 로 모드 논쟁. 만큼
스트림은 계속 열려 있으며 후속 호출은 표현 동일한 문자열로 평가됩니다.
값은 기존 스트림에 출력을 씁니다. 개울은 다음 날까지 열려 있어야 합니다.
가까운 기능(참조 입력 / 출력 and 일반 기능)는 다음과 같은 표현식으로 호출됩니다.
동일한 문자열 값으로 평가됩니다. 그 때에는 하천은 마치 다음과 같이 폐쇄되어야 한다.
에 전화 닫기() 함수는 POSIX.1‐2008의 시스템 인터페이스 볼륨에 정의되어 있습니다.
문법에 자세히 설명되어 있듯이 문법, 이러한 출력 문은
-분리된 목록 표현비 터미널에 의해 문법에서 참조됩니다.
기호 expr_list, print_expr_list및 print_expr_list_opt. 이 목록은 여기에서 참조됩니다.
로 표현 명부이며 각 구성원을 이라고 합니다. 표현 논의.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 인쇄 명령문은 각 표현식 인수의 값을 표시된 항목에 기록해야 합니다.
현재 출력 필드 구분 기호로 구분된 출력 스트림(변수 참조) FSO 위에),
출력 레코드 구분 기호로 종료됩니다(변수 참조). ORS 위에). 모든 표현
인수는 문자열로 간주되며 필요한 경우 변환됩니다. 이 전환은
에 설명된 대로 식 in AWK, 예외적으로 printf 형식 OFMT
의 값 대신 사용되어야 합니다. CONVFMT. 빈 표현식 목록은 다음을 나타냅니다.
전체 입력 레코드($0).
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 printf 명령문은 파일 형식과 유사한 표기법을 기반으로 출력을 생성합니다.
POSIX.1‐2008의 이 볼륨에서 파일 형식을 설명하는 데 사용되는 표기법(기본
POSIX.1-2008의 정의 볼륨, 장 5, 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 형성 표기법). 출력은 다음과 같습니다
첫 번째로 지정된 대로 생산됨 표현 문자열로서의 인수 체재 and
후속의 표현 문자열로서의 인수 arg1 에 아르간, 다음을 포함
예외:
1. 그만큼 체재 그래픽 표현이 아닌 실제 문자열이어야 합니다.
따라서 빈 문자 위치를 포함할 수 없습니다. 그만큼 에서 체재
문자열(a 이외의 모든 컨텍스트) 플래그 변환 사양은 다음과 같습니다.
출력에 복사되는 일반 문자로 처리됩니다.
2. 문자 집합에 다음이 포함된 경우 '' 문자와 해당 문자가 체재
문자열인 경우 출력에 복사되는 일반 문자로 처리됩니다.
3. 그만큼 탈출 시퀀스 로 시작하는 캐릭터는 다음과 같이 취급됩니다.
출력에 복사되는 일반 문자 시퀀스입니다. 참고로 이것들도 마찬가지다
시퀀스는 다음과 같이 어휘적으로 해석됩니다. AWK 리터럴 문자열에 나타날 때
그러나 그들은 특별대우를 받지 아니한다. printf 성명서.
4. 들 폭 or 정확 다음과 같이 지정할 수 있습니다. '*' 숫자 대신 문자
끈. 이 경우 표현식 목록에서 다음 인수를 가져와야 합니다.
필드 너비 또는 정밀도로 사용되는 숫자 값입니다.
5. 구현은 d or u 변환
지정자 문자 에서 지정하지 않은 문자 체재 끈.
6. 구현은 o 변환 지정자 문자
앞에 XNUMX이 지정되지 않은 경우 체재 끈.
7. 그 c 변환 지정자 문자: 인수에 숫자 값이 있으면
인코딩이 해당 값인 문자가 출력됩니다. 값이 XNUMX이거나 그렇지 않은 경우
문자 집합의 문자 인코딩에 대한 동작은 정의되지 않습니다. 만약
인수에 숫자 값이 없으면 문자열 값의 첫 번째 문자는 다음과 같습니다.
출력되다; 문자열에 문자가 포함되어 있지 않으면 동작이 정의되지 않습니다.
8. 인수를 사용하는 각 변환 사양에 대해 다음 표현식은
인수가 평가됩니다. 다음을 제외하고는 c 변환 지정자
문자가 있으면 값이 변환됩니다(에 지정된 규칙에 따라).
식 in AWK)을 변환 사양에 적합한 유형으로 변경합니다.
9. 모든 변환을 만족시키기에는 표현식 인수가 부족한 경우
사양 체재 문자열이면 동작이 정의되지 않습니다.
10. 문자 순서가 있는 경우 체재 문자열은 a로 시작합니다. '%' 캐릭터이지만
유효한 변환 사양을 형성하지 않으면 동작이 지정되지 않습니다.
모두 인쇄 and printf 최소 {LINE_MAX}바이트를 출력할 수 있습니다.
기능
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 언어에는 산술, 문자열, 입력/출력, 등 다양한 기능이 내장되어 있습니다.
그리고 일반.
산수 기능
다음을 제외한 산술 함수 INT, ISO C 표준을 기반으로 해야 합니다(참조:
섹션 1.1.2, 개념 파생 에 전에, ISO C 스탠다드). 동작은 다음에서 정의되지 않았습니다.
ISO C 표준에서 오류가 반환되거나 동작이 다음과 같이 지정되는 경우
한정되지 않은. 비록 문법(참조 문법) 내장 기능이 표시되지 않도록 허용합니다.
인수 또는 괄호(인수 또는 괄호가 선택 사항으로 표시되지 않은 경우)
다음 목록( "[]" 대괄호), 그러한 사용은 정의되지 않습니다.
아탄2(y,x)
아크탄젠트 반환 y/x [−π,π] 범위의 라디안으로 표시됩니다.
코사인(x) 다음의 코사인을 반환합니다. x어디로 x 라디안 단위입니다.
죄(x) 사인 반환 x어디로 x 라디안 단위입니다.
특급(x) 다음의 지수 함수를 반환합니다. x.
기록(x) 다음의 자연로그를 반환합니다. x.
sqrt(x) 의 제곱근을 반환합니다. x.
INT(x) 정수로 잘린 인수를 반환합니다. 잘림은 다음과 같은 경우 0을 향해야 합니다.
x> 0.
랜드() 난수를 반환합니다. n, 0≤n
시끄러운([특급])
다음에 대한 시드 값을 설정합니다. 랜드 에 특급 또는 다음과 같은 경우에는 시간을 사용하세요. 특급 생략됩니다.
이전 시드 값이 반환됩니다.
끈 기능
다음 목록의 문자열 함수가 지원됩니다. 비록 문법(참조
문법)는 내장 함수가 인수나 괄호 없이 표시되도록 허용합니다.
인수나 괄호는 다음 목록에서 선택 사항으로 표시됩니다.
그 안에 있는 그들 "[]" 대괄호), 그러한 사용은 정의되지 않습니다.
gsub(오히려, 답장[, in])
처럼 행동 이하 (아래 참조), 단, 다음의 모든 항목을 대체해야 합니다.
정규 표현식(예: ed 유틸리티 글로벌 대체) $0 또는 in
인수(지정된 경우).
색인(s, t)
문자열에서 1부터 번호를 매겨 문자 단위로 위치를 반환합니다. s 어디에 문자열 t
처음 발생하거나 전혀 발생하지 않으면 XNUMX입니다.
길이[([s])]
문자열로 취한 인수의 길이를 문자 단위로 반환합니다.
인수가 없으면 전체 레코드는 $0입니다.
일치(s, 오히려)
문자열에서 1부터 번호를 매겨 문자 단위로 위치를 반환합니다. s 어디
확장 정규 표현식 오히려 발생하며, 전혀 발생하지 않으면 XNUMX입니다.
RSTART는 시작 위치로 설정되어야 합니다(반환된 위치와 동일).
값), 일치하는 항목이 없으면 XNUMX입니다. RLENGTH는
일치하는 문자열, 일치하는 항목이 없으면 -1입니다.
분열(s, a[, fs ])
문자열 분할 s 배열 요소로 a[1], a[2], ..., a[n], 그리고 반환 n. 모든
분할이 수행되기 전에 배열의 요소가 삭제되어야 합니다. 그만큼
분리는 ERE를 통해 수행됩니다. fs 또는 필드 구분 기호로 FS if fs is
주어지지 않았습니다. 각 배열 요소는 생성 시 문자열 값을 가지며,
해당하는 경우 배열 요소는 숫자 문자열로 간주됩니다(참조
식 in AWK). Null 문자열이 다음 값으로 미치는 영향 fs is
지정되지 않음.
스프린트(fmt, 특급, 특급,...)
표현식에 따라 형식을 지정하세요. printf 에 의해 주어진 형식 fmt 반환
결과 문자열.
보결(오히려, 답장[, in ])
문자열을 대체하십시오. 답장 확장된 첫 번째 인스턴스 대신
정규식 오히려 문자열로 in 그리고 대체 횟수를 반환합니다. 안
('&') 문자열에 나타남 답장 문자열로 대체됩니다.
에 in ERE와 일치합니다. 안 앞에는 ~일 것이다
문자 그대로 해석하면 된다 성격. 두 가지 발생
연이은 문자는 단일 리터럴로 해석됩니다.
성격. 기타 발생 (예를 들어,
다른 문자 앞에 있음)은 리터럴로 처리됩니다.
성격. 만약에 참고하세요 답장 문자열 리터럴입니다(어휘 토큰 STRING; 만나다
문법), 처리 문자는 어휘 뒤에 나타납니다.
모든 어휘를 포함한 처리 - 이스케이프 시퀀스 처리. 만약에 in
지정되었으며 lvalue가 아닙니다(참조: 식 in AWK), 그 행동은
한정되지 않은. 만약에 in 생략하고, AWK 그 자리에 현재 기록($0)을 사용합니다.
하위 문자열(s, m[, n ])
기껏해야 반환 n-문자 부분 문자열 s 위치에서 시작하는 m,
1부터 번호를 매긴다. n 생략되거나, n 현재보다 더 많은 문자를 지정합니다.
문자열에 남아 있으면 부분 문자열의 길이는 길이에 의해 제한됩니다.
문자열의 s.
낮추다(s)
문자열을 기반으로 문자열을 반환합니다. s. 의 각 문자 s 그건 대문자야
을 갖도록 지정된 편지 낮추다 매핑에 의한 LC_CTYPE 카테고리
현재 로케일은 반환된 문자열에서 소문자로 대체됩니다.
매핑으로 지정됩니다. 의 다른 문자 s 에서는 변경되지 않습니다.
반환된 문자열입니다.
토퍼(s)
문자열을 기반으로 문자열을 반환합니다. s. 의 각 문자 s 그건 소문자야
을 갖도록 지정된 편지 토퍼 매핑에 의한 LC_CTYPE 카테고리
현재 로케일은 반환된 문자열에서 대문자로 대체됩니다.
매핑으로 지정됩니다. 의 다른 문자 s 반환된 내용은 변경되지 않았습니다.
끈.
이전의 모든 함수는 오히려 매개변수로 패턴이나 문자열을 기대합니다.
다음에 정의된 정규 표현식인 값 표현식 정규병 식.
입력 / 출력 and 일반 기능
입력/출력 및 일반 기능은 다음과 같습니다.
가까운(표현)
열려 있는 파일이나 파이프를 닫습니다. 인쇄 or printf 진술이나 전화
Getline 동일한 문자열 값을 사용하는 경우 표현. 오픈 횟수 제한
표현 인수는 구현에 따라 정의됩니다. 클로징이 성공했다면,
함수는 XNUMX을 반환해야 합니다. 그렇지 않으면 XNUMX이 아닌 값을 반환합니다.
표현 | Getline [였다]
명령 출력에서 파이프된 스트림에서 입력 레코드를 읽습니다. 그만큼
현재 다음 값으로 열려 있는 스트림이 없으면 스트림이 생성됩니다.
표현 명령 이름으로. 생성된 스트림은 다음과 같습니다.
에 대한 호출로 생성됨 Popen() 값을 갖는 함수 표현 로
명령 인수 및 값 r 로 모드 논쟁. 스트림이 있는 한
열려 있는 상태로 유지되며 후속 호출은 다음과 같습니다. 표현 동일한 문자열로 평가됩니다.
값은 스트림에서 후속 레코드를 읽어야 합니다. 그 흐름은 그대로 남아 있을 것이다
까지 영업 가까운 함수는 다음과 같이 평가되는 표현식으로 호출됩니다.
동일한 문자열 값. 그 때 스트림은 다음을 호출하는 것처럼 닫힙니다.
전에, 닫기() 기능. 만약에 였다 생략됨, $0 및 NF 설정됩니다; 그렇지 않으면, 였다
설정되어야 하며, 해당되는 경우 숫자 문자열로 간주됩니다(참조:
식 in AWK).
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 Getline 연산자는 다음과 같은 경우 모호한 구문을 형성할 수 있습니다.
괄호가 없는 연산자(연결 포함)는 '|' (로
다음을 포함하는 표현식의 시작 Getline). 의 맥락에서 '$'
운영자, '|' 것보다 우선순위가 낮은 것처럼 행동합니다. '$'. 결과
다른 운영자를 평가하는 방법은 지정되지 않았으며 적합한 응용 프로그램을 사용해야 합니다.
그러한 모든 사용법을 적절하게 괄호 안에 넣으십시오.
Getline $0을 현재 입력 파일의 다음 입력 레코드로 설정합니다. 이 형태의
Getline 을 설정한다 NF, NR및 FNR 변수.
Getline 였다
변수 설정 였다 현재 입력 파일의 다음 입력 레코드로 이동하고,
적절한, 였다 숫자 문자열로 간주됩니다(참조: 식 in AWK).
이러한 형태의 Getline 을 설정한다 FNR and NR 변수.
Getline [였다] < 표현
명명된 파일에서 다음 입력 레코드를 읽습니다. 그만큼 표현 한다
경로 이름으로 사용되는 문자열을 생성하기 위해 평가됩니다. 만약 그 파일이
이름이 현재 공개되지 않은 경우 공개됩니다. 흐름이 남아 있는 한
열려 있는 후속 통화 표현 동일한 문자열 값으로 평가됩니다.
파일에서 후속 레코드를 읽어야 합니다. 파일은 다음까지 열려 있어야 합니다.
전에, 가까운 함수는 동일한 값으로 평가되는 표현식으로 호출됩니다.
문자열 값. 만약에 였다 생략됨, $0 및 NF 설정됩니다; 그렇지 않으면, 였다 한다
설정되고 해당되는 경우 숫자 문자열로 간주됩니다(참조:
식 in AWK).
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 Getline 연산자는 다음과 같은 경우 모호한 구문을 형성할 수 있습니다.
괄호 안의 이진 연산자(연결 포함) 오른쪽에 '<'
(다음을 포함하는 표현식의 끝까지 Getline). 결과
그러한 구성을 평가하는 것은 지정되지 않았으며 적합한 응용 프로그램은 다음과 같습니다.
그러한 모든 사용법을 적절하게 괄호 안에 넣으십시오.
체계(표현)
주어진 명령을 실행하십시오. 표현 와 동등한 방식으로 체계()
POSIX.1‐2008의 시스템 인터페이스 볼륨에 정의된 함수를 반환하고
명령의 종료 상태.
모든 형태의 Getline 입력이 성공하면 1을 반환하고, 파일 끝이면 1을 반환하고, 입력이 성공하면 −XNUMX을 반환합니다.
오류.
문자열이 파일이나 파이프라인의 이름으로 사용되는 경우 애플리케이션은 다음을 보장해야 합니다.
문자열이 텍스트적으로 동일하다는 것입니다. "동일한 문자열 값"이라는 용어는 다음을 의미합니다.
``동등한 문자열'', 심지어는 문자, 대표하다
다른 파일.
사용자 정의 기능
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 언어는 사용자 정의 함수도 제공합니다. 이러한 기능은 다음과 같이 정의될 수 있습니다.
기능 name([매개 변수...]) { 문 }
함수는 어디에서나 참조될 수 있습니다. AWK 프로그램; 특히 그 사용은
정의보다 우선합니다. 함수의 범위는 전역입니다.
함수 매개변수가 있는 경우 스칼라 또는 배열이 될 수 있습니다. 그 행동은
배열 이름이 함수가 스칼라로 사용하는 매개변수로 전달되는 경우 정의되지 않습니다.
스칼라 표현식이 함수가 배열로 사용하는 매개변수로 전달되는 경우.
함수 매개변수는 스칼라인 경우 값으로, 배열 이름인 경우 참조로 전달됩니다.
함수 정의의 매개변수 수는 매개변수 수와 일치할 필요가 없습니다.
함수 호출의 매개변수. 과도한 형식 매개변수는 지역 변수로 사용될 수 있습니다.
함수 정의에 있는 것보다 더 적은 수의 인수가 함수 호출에 제공되는 경우
함수 본문에서 스칼라로 사용되는 추가 매개변수는 다음과 같이 평가됩니다.
초기화될 때까지 초기화되지 않은 값과 추가 매개변수
배열은 초기화되지 않은 배열로 처리되므로 함수 본문에서 사용됩니다.
각 요소는 초기화될 때까지 초기화되지 않은 값으로 평가됩니다.
함수를 호출할 때 함수 이름과 함수 사이에 공백을 넣을 수 없습니다.
여는 괄호. 함수 호출은 중첩될 수 있으며 재귀 호출은 다음에 대해 수행될 수 있습니다.
기능. 중첩되거나 재귀적인 함수 호출에서 반환되면 모든 값은
전달된 배열 매개변수를 제외하고 호출 함수의 매개변수는 변경되지 않습니다.
참고로. 그만큼 return 문을 사용하여 값을 반환할 수 있습니다. 만약 return 성명서
함수 정의 외부에 나타나면 동작이 정의되지 않습니다.
함수 정의에서, 개봉 전 문자는 선택사항입니다.
중괄호와 닫는 중괄호 뒤에. 함수 정의는 프로그램의 어느 곳에나 나타날 수 있습니다.
위치 패턴 액션 쌍이 허용됩니다.
문법
이 섹션의 문법과 다음 섹션의 어휘 규칙은 다음과 같습니다.
함께 구문을 설명합니다. AWK 프로그램들. 이 스타일의 일반적인 규칙
문법은 에 설명되어 있습니다. 섹션 1.3, 문법 협약. 유효한 프로그램은 다음과 같습니다.
비단말 기호로 표현됨 프로그램 문법에서. 이 공식 구문은 다음과 같습니다.
앞의 텍스트 구문 설명보다 우선합니다.
%토큰 이름 NUMBER STRING 오히려
%토큰 FUNC_NAME /* 성함 다음에 by '(' 없이 화이트 공간. */
/* 키워드 */
%토큰 시작 끝
/* '시작' '끝' */
%token 나누기 계속 삭제 다른 작업 수행
/* '중단' '계속' '삭제' '실행' 'else' */
%token 기능에 대한 종료
/* '종료' 'for' '함수' 'if' 'in' */
%token 다음 인쇄 Printf 반환 동안
/* '다음' '인쇄' 'printf' '반환' '동안' */
/* 예약된 함수 이름 */
%토큰 BUILTIN_FUNC_NAME
/* 다음에 대한 토큰 XNUMX개:
* atan2 cos sin exp log sqrt int rand srand
* gsub 인덱스 길이 일치 분할 sprintf sub
* substr tolower toupper close 시스템
*/
%토큰 GETLINE
/* 다른 내장 기능과 구문이 다릅니다. */
/* 두 문자 토큰. */
%토큰 ADD_ASSIGN SUB_ASSIGN MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN POW_ASSIGN
/* '+=' '−=' '*=' '/=' '%=' '^=' */
%token OR AND NO_MATCH EQ LE GE NE INCR DECR APPEND
/* '||' '&&' '!~' '==' '<=' '>=' '!=' '++' '−−' '>>' */
/* 한 문자 토큰. */
%token '{' '}' '(' ')' '[' ']' ',' ';' NEWLINE
%token '+' '−' '*' '%' '^' '!' '>' '<' '|' '?' ':' ' " " ' '$' '='
%프로그램 시작
%%
프로그램 : item_list
| actionless_item_list
;
item_list : 개행_opt
| actionless_item_list 항목 종결자
| item_list 항목 종결자
| item_list 액션 종결자
;
actionless_item_list : item_list 패턴 종결자
| actionless_item_list 패턴 종결자
;
아이템 : 패턴액션
| 함수 이름 '(' param_list_opt ')'
newline_opt 작업
| 함수 FUNC_NAME '(' param_list_opt ')'
newline_opt 작업
;
param_list_opt : /* 비어 있음 */
| param_list
;
param_list : 이름
| param_list ',' 이름
;
패턴 : 시작
| 끝
| 특급
| expr ',' newline_opt expr
;
작업 : '{' newline_opt '}'
| '{' newline_optterended_statement_list '}'
| '{' newline_opt unterminating_statement_list '}'
;
종결자 : 종결자 ';'
| 터미네이터 NEWLINE
| ';'
| 뉴라인
;
종결_진술_목록 : 종결_진술
| 종결_진술_목록 종결_진술
;
unterminated_statement_list : 종료되지 않은_statement
| 종료된_문_목록 종료되지 않은_문
;
종료된_진술: newline_opt 작업
| '(' expr ')'인 경우 newline_opt 종료_진술
| '(' expr ')'인 경우 newline_opt 종료_진술
그렇지 않으면 개행_opt 종료_문
| '(' expr ')' newline_opt 종료_진술
| '(' simple_statement_opt ';'의 경우
expr_opt ';' simple_statement_opt ')' newline_opt
종료된 진술
| '(' NAME In NAME ')'의 경우 newline_opt
종료된 진술
| ';' 개행_opt
| terminatable_statement NEWLINE newline_opt
| terminatable_statement ';' 개행_opt
;
unterminating_statement : 종료 가능_statement
| '(' expr ')'인 경우 newline_opt unterminating_statement
| '(' expr ')'인 경우 newline_opt 종료_진술
그렇지 않으면 newline_opt unterminating_statement
| '(' expr ')' newline_opt unterminating_statement 동안
| '(' simple_statement_opt ';'의 경우
expr_opt ';' simple_statement_opt ')' newline_opt
종결되지 않은 진술
| '(' NAME In NAME ')'의 경우 newline_opt
종결되지 않은 진술
;
terminatable_statement : simple_statement
| 부서지다
| 계속하다
| 다음
| expr_opt 종료
| expr_opt 반환
| newline_optittered_statement '(' expr ')' 동안 수행
;
simple_statement_opt : /* 비어 있음 */
| simple_statement
;
simple_statement : NAME '[' expr_list ']' 삭제
| 특급
| print_statement
;
print_statement : simple_print_statement
| simple_print_statement 출력_리디렉션
;
simple_print_statement : print_expr_list_opt 인쇄
| '(' multiple_expr_list ')' 인쇄
| printf print_expr_list
| Printf '(' multiple_expr_list ')'
;
출력 방향 전환 : '>' expr
| EXPR 추가
| '|' 특급
;
expr_list_opt : /* 비어 있음 */
| expr_list
;
expr_list : expr
| multiple_expr_list
;
multiple_expr_list : expr ',' newline_opt expr
| multiple_expr_list ',' newline_opt expr
;
expr_opt : /* 비어 있음 */
| 특급
;
expr : 단항_expr
| non_unary_expr
;
unary_expr : '+' expr
| '-' expr
| unary_expr '^' expr
| unary_expr '*' expr
| unary_expr '/' expr
| unary_expr '%' expr
| unary_expr '+' expr
| unary_expr '-' expr
| unary_expr 비_unary_expr
| unary_expr '<' expr
| unary_expr 르 expr
| unary_expr NE 지수
| unary_expr EQ expr
| unary_expr '>' expr
| unary_expr GE 지수
| unary_expr '~' expr
| unary_expr NO_MATCH 지수
| unary_expr NAME의
| unary_expr 및 newline_opt expr
| unary_expr 또는 newline_opt expr
| unary_expr '?' expr ':' expr
| 단항 입력_함수
;
non_unary_expr : '(' expr ')'
| '!' 특급
| non_unary_expr '^' expr
| non_unary_expr '*' expr
| non_unary_expr '/' expr
| non_unary_expr '%' expr
| non_unary_expr '+' expr
| non_unary_expr '−' expr
| non_unary_expr non_unary_expr
| non_unary_expr '<' expr
| non_unary_expr LE 지수
| non_unary_expr NE 지수
| non_unary_expr EQ expr
| non_unary_expr '>' expr
| non_unary_expr GE 지수
| non_unary_expr '~' expr
| non_unary_expr NO_MATCH 지수
| NAME의 non_unary_expr
| NAME의 '(' multiple_expr_list ')'
| non_unary_expr 및 newline_opt expr
| non_unary_expr 또는 newline_opt expr
| non_unary_expr '?' expr ':' expr
| 숫자
| 끈
| l값
| 오히려
| lvalue INCR
| l값 DECR
| INCR lvalue
| DECR l값
| lvalue POW_ASSIGN expr
| lvalue MOD_ASSIGN expr
| lvalue MUL_ASSIGN expr
| lvalue DIV_ASSIGN expr
| lvalue ADD_ASSIGN expr
| lvalue SUB_ASSIGN expr
| lvalue '=' expr
| FUNC_NAME '(' expr_list_opt ')'
/* '(' 앞에 공백은 허용되지 않습니다 */
| BUILTIN_FUNC_NAME '(' expr_list_opt ')'
| BUILTIN_FUNC_NAME
| 비단항 입력_함수
;
print_expr_list_opt : /* 비어 있음 */
| print_expr_list
;
print_expr_list : print_expr
| print_expr_list ',' newline_opt print_expr
;
print_expr : 단항_print_expr
| non_unary_print_expr
;
unary_print_expr : '+' print_expr
| '-' print_expr
| unary_print_expr '^' print_expr
| unary_print_expr '*' print_expr
| unary_print_expr '/' print_expr
| unary_print_expr '%' print_expr
| unary_print_expr '+' print_expr
| unary_print_expr '-' print_expr
| unary_print_expr non_unary_print_expr
| unary_print_expr '~' print_expr
| unary_print_expr NO_MATCH print_expr
| unary_print_expr NAME의
| unary_print_expr 및 newline_opt print_expr
| unary_print_expr 또는 newline_opt print_expr
| unary_print_expr '?' print_expr ':' 인쇄_expr
;
non_unary_print_expr : '(' expr ')'
| '!' print_expr
| non_unary_print_expr '^' print_expr
| non_unary_print_expr '*' print_expr
| non_unary_print_expr '/' print_expr
| non_unary_print_expr '%' print_expr
| non_unary_print_expr '+' print_expr
| non_unary_print_expr '-' print_expr
| non_unary_print_expr non_unary_print_expr
| non_unary_print_expr '~' print_expr
| non_unary_print_expr NO_MATCH print_expr
| non_unary_print_expr NAME의
| NAME의 '(' multiple_expr_list ')'
| non_unary_print_expr 및 newline_opt print_expr
| non_unary_print_expr 또는 newline_opt print_expr
| non_unary_print_expr '?' print_expr ':' 인쇄_expr
| 숫자
| 끈
| l값
| 오히려
| lvalue INCR
| l값 DECR
| INCR lvalue
| DECR l값
| lvalue POW_ASSIGN print_expr
| lvalue MOD_ASSIGN print_expr
| l값 MUL_ASSIGN print_expr
| lvalue DIV_ASSIGN print_expr
| l값 ADD_ASSIGN print_expr
| l값 SUB_ASSIGN print_expr
| lvalue '=' print_expr
| FUNC_NAME '(' expr_list_opt ')'
/* '(' 앞에 공백은 허용되지 않습니다 */
| BUILTIN_FUNC_NAME '(' expr_list_opt ')'
| BUILTIN_FUNC_NAME
;
좌값 : 이름
| 이름 '[' expr_list ']'
| '$' 표현
;
non_unary_input_function : simple_get
| simple_get '<' expr
| non_unary_expr '|' simple_get
;
unary_input_function : unary_expr '|' simple_get
;
simple_get : GETLINE
| GETLINE lvalue
;
newline_opt : /* 비어 있음 */
| newline_opt 뉴라인
;
이 문법에는 다음과 같이 해결해야 하는 몇 가지 모호성이 있습니다.
* 연산자 우선순위 및 연관성은 다음에 설명되어 있습니다. 작업대 4 - 1, 식
in 감소 상위 in AWK.
* 모호한 경우 그렇지 않으면 가장 직전의 것과 연관되어야 한다
if 그것은 문법을 만족시킬 것입니다.
* 일부 상황에서는 ('/')는 ERE를 둘러싸는 데 사용됩니다.
나눗셈 연산자. 이는 분할이 어디에서든지 하는 방식으로 해결되어야 합니다.
연산자가 나타날 수 있는 경우 는 나누기 연산자로 간주됩니다. (없다.
단항 나눗셈 연산자.)
각 표현식은 AWK 프로그램은 우선순위 및 연관성 규칙을 준수해야 합니다.
모호성을 해결하는 데 이것이 필요하지 않은 경우에도 마찬가지입니다. 예를 들어, 왜냐하면 '$' 더 높다
보다 우선 '++', 문자열 "$x++−−" 유효하지 않다 AWK 표현은 그렇더라도
문법에 의해 명확하게 구문 분석됩니다. "$(x++)−−".
형식 문법에서 명확하지 않을 수 있는 한 가지 규칙은 입니다.
문자는 허용됩니다. 종료와 같은 몇 가지 명백한 배치가 있습니다.
문 사이에 문자를 이스케이프하는 데 를 사용할 수 있습니다.
어휘 토큰. 또한 문자가 없는 문자는
쉼표, 여는 중괄호, 논리 AND 연산자("&&"), 논리 OR 연산자("||"),
전에, do 키워드, 그렇지 않으면 키워드 및 닫는 괄호 if, for 및 동안
성명서. 예를 들면 :
{ 인쇄 $ 1,
$2 }
어휘 협약
에 대한 어휘 규칙 AWK 이전 문법과 관련하여 프로그램은 다음과 같습니다.
다음과 같이 :
1. 명시된 경우를 제외하고, AWK 가능한 가장 긴 토큰 또는 구분 기호 시작을 인식해야 합니다.
주어진 지점에서.
2. 설명은 문자로 시작하는 모든 문자로 구성됩니다.
으로 종료되지만 다음 항목은 제외됩니다. 의견은
어휘 토큰을 구분하는 것 외에는 아무런 효과가 없습니다.
3. 토큰으로 인식됩니다. 뉴라인.
4. 바로 뒤에 오는 문자는 효과가 없습니다.
5. 토큰 STRING 문자열 상수를 나타냅니다. 문자열 상수는 다음으로 시작됩니다.
캐릭터 '"'. 문자열 상수 내에서 문자는 다음과 같습니다.
기본 테이블에 지정된 대로 이스케이프 시퀀스를 시작하는 것으로 간주됩니다.
POSIX.1-2008의 정의 볼륨, 장 5, 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 형성 표기법 ('\\', '\NS', '\NS',
'\NS', '\N', '\NS', '\티', '\V'). 또한, 작업대 4 - 2, 탈출
시퀀스 in AWK 인식됩니다. 은 문자열 내에서 발생해서는 안 됩니다.
끊임없는. 문자열 상수는 이스케이프되지 않은 첫 번째 발생으로 종료됩니다.
캐릭터 '"' 문자열 상수를 시작하는 것 뒤에. 의 가치
문자열은 이스케이프 처리되지 않은 모든 문자와 이스케이프 값의 시퀀스입니다.
두 구분 기호 사이의 시퀀스(포함하지 않음) '"' 자.
6. 토큰 오히려 확장된 정규식 상수를 나타냅니다. ERE 상수
문자로 시작됩니다. ERE 상수 내에서
문자는 표에 지정된 대로 이스케이프 시퀀스를 시작하는 것으로 간주됩니다.
POSIX.1-2008의 기본 정의 볼륨, 장 5, 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 형성 표기법. 에
또한 이스케이프 시퀀스는 작업대 4 - 2, 탈출 시퀀스 in AWK 한다
인식. 애플리케이션은 ERE 내에서 이 발생하지 않도록 해야 합니다.
끊임없는. ERE 상수는 이스케이프되지 않은 첫 번째 발생으로 종료됩니다.
ERE 상수를 시작하는 문자 뒤의 문자입니다. 확장 정규
ERE 상수로 표시되는 표현식은 이스케이프되지 않은 모든 시퀀스입니다.
두 문자 사이(포함하지 않음)의 이스케이프 시퀀스 문자 및 값
문자를 구분합니다.
7. 은 어휘 토큰을 구분하는 경우를 제외하고는 아무런 효과가 없습니다. STRING or
오히려 토큰.
8. 토큰 NUMBER 숫자 상수를 나타냅니다. 그 형식과 숫자 값은 다음과 같습니다.
또는 소수 부동 상수 ISO C에서 지정한 토큰
표준이거나 일련의 십진수여야 하며 다음과 같이 평가되어야 합니다.
XNUMX진수의 정수 상수입니다. 또한 구현에서는 숫자 상수를 허용할 수 있습니다.
형식과 숫자 값은 다음과 같습니다. XNUMX진수 상수 and
XNUMX진수 부동 상수 ISO C 표준에 지정된 토큰입니다.
값이 너무 크거나 작아서 표현할 수 없는 경우(참조 섹션 1.1.2,
개념 파생 에 전에, ISO C 스탠다드), 동작은 정의되지 않았습니다.
9. 이식 가능한 문자 집합의 밑줄, 숫자 및 알파벳 순서
(POSIX.1-2008의 기본 정의 볼륨 참조, 섹션 6.1, 휴대용 충전 케이스 캐릭터
세트)는 이나 알파벳 문자로 시작하는 것으로 간주됩니다.
단어입니다.
10. 다음 단어는 개별 토큰으로 인식되어야 하는 키워드입니다. 그만큼
토큰 이름은 키워드와 동일합니다.
BEGIN 삭제 END 기능 in printf
하다 do 출구 Getline 다음 것 return
계속 그렇지 않으면 for if 인쇄 동안
11. 다음 단어는 내장된 기능의 이름이며 다음과 같이 인식됩니다.
토큰 BUILTIN_FUNC_NAME:
아탄2 gsub 기록 분열 이하 토퍼
가까운 색인 일치 스프린트 하위 문자열
코사인 INT 랜드 sqrt 체계
특급 길이 죄 시끄러운 낮추다
위에 나열된 키워드와 내장 함수 이름은 예약된 것으로 간주됩니다.
단어.
12. 토큰 이름 키워드나 내장된 이름이 아닌 단어로 구성됩니다.
함수이며 바로 다음에 (구분자 없이) 다음이 오지 않습니다. '('
문자.
13. 토큰 FUNC_NAME 키워드나 이름이 아닌 단어로 구성되어야 합니다.
내장 함수, 바로 뒤에 (구분자 없이) '(' 문자.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 '(' 문자는 토큰의 일부로 포함되지 않습니다.
14. 다음 두 문자 시퀀스는 명명된 토큰으로 인식됩니다.
┌───────────┬──────────┬───────────┬─────────┐┐
│Token 성함 │ 순서 │ Token 성함 │ 순서 │
├───────────┼──────────┼───────────┼──────────┤
│추가_할당 │ += │ NO_MATCH │ !~ │
│SUB_ASSIGN │ -= │ EQ │ == │
│MUL_ASSIGN │ *= │ LE │ <= │
│DIV_ASSIGN │ /= │ GE │ >= │
│MOD_ASSIGN │ %= │ NE │ != │
│POW_ASSIGN │ ^= │ 증가분 │ ++ │
│OR │ || │ 감소 │ −− │
│및 │ && │ 추가 │ >> │
└───────────┴──────────┴───────────┴──────────┘
15. 다음 단일 문자는 이름이 다음과 같은 토큰으로 인식됩니다.
캐릭터:
{ } ( ) [ ] , ; + - * % ^ ! > < | ? : " " $ =
토큰 사이에 어휘적 모호성이 있습니다. 오히려 그리고 토큰 '/' and DIV_ASSIGN.
입력 시퀀스가 구문적 맥락에서 문자로 시작하는 경우
토큰 '/' or DIV_ASSIGN 유효한 프로그램에서 다음 토큰으로 나타날 수 있습니다.
인식될 수 있는 두 개의 토큰이 인식됩니다. 다른 구문에서는
토큰이 있는 컨텍스트 오히려 유효한 프로그램에서 다음 토큰으로 나타날 수 있습니다.
오히려 인정됩니다.
EXIT 지위
다음 종료 값이 반환됩니다.
0 모든 입력 파일이 성공적으로 처리되었습니다.
>0 오류가 발생했습니다.
종료 상태는 프로그램 내에서 다음을 사용하여 변경할 수 있습니다. 출구 표현.
결과 OF 오류
만약에 어떠한 파일 피연산자가 지정되었지만 명명된 파일에 액세스할 수 없습니다. AWK 쓸 것이다
진단 메시지를 표준 오류로 변경하고 추가 조치 없이 종료합니다.
프로그램이 다음 중 하나에 의해 지정된 경우 프로그램 피연산자 또는 프로그램 파일 피연산자는
유효한 AWK 프로그램(확장된 설명 섹션에 지정된 대로)의 동작은 다음과 같습니다.
찾으시는 주소가 없습니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 수행원 섹션 are 유익합니다.
신청 사용법
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 색인, 길이, 일치및 하위 문자열 유사한 기능을 혼동해서는 안 됩니다.
ISO C 표준의 기능; 그만큼 AWK 버전은 문자를 다루는 반면 ISO C는
표준은 바이트를 다룹니다.
연결 연산은 인접 표현식이 아닌 인접 표현식으로 표현되기 때문입니다.
명시적 연산자인 경우 적절한 연산자를 적용하기 위해 괄호를 사용해야 하는 경우가 많습니다.
평가 우선순위.
사용 예
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 명령줄에 지정된 프로그램은 단일 프로그램 내에서 가장 쉽게 지정됩니다.
따옴표(예: '프로그램')를 사용하는 응용 프로그램의 경우 sh, 때문에 AWK 프로그램을 일반적으로
큰따옴표를 포함하여 셸에 특수한 문자가 포함되어 있습니다. 경우에
어디 AWK 프로그램에는 작은따옴표 문자가 포함되어 있으므로 일반적으로 지정하는 것이 가장 쉽습니다.
프로그램의 대부분은 따옴표로 묶인 쉘에 의해 연결된 작은따옴표 안의 문자열입니다.
작은따옴표 문자. 예를 들어:
AWK '/'\''/ { 인쇄 "인용하다:", $0 }'
접두사가 붙은 작은따옴표 문자를 포함하는 표준 입력의 모든 행을 인쇄합니다.
과 견적을 원하시면, 오늘 Kevin Lee Company 에 연락주세요.:.
다음은 간단한 예입니다. AWK 프로그램 :
1. 필드 3이 5보다 큰 모든 입력 라인을 표준 출력에 기록합니다.
$3 > 5
2. 매 XNUMX번째 줄마다 다음을 작성합니다.
(NR % 10) == 0
3. 정규식과 일치하는 하위 문자열이 있는 줄을 작성합니다.
/(G|D)(2[0−9][[:alpha:]]*)/
4. 다음을 포함하는 하위 문자열이 있는 행을 인쇄합니다. 'NS' or '디', 그 다음에는 일련의
숫자와 문자. 이 예에서는 문자 클래스를 사용합니다. 손가락 and 알파 일치하는
언어 독립적 숫자 및 알파벳 문자:
/(G|D)([[:digit:][:alpha:]]*)/
5. 두 번째 필드가 정규식과 일치하고 네 번째 필드가 일치하는 줄을 작성합니다.
필드는 다음을 수행하지 않습니다.
$2 " " /xyz/ && $4 ! " " /xyz/
6. 두 번째 필드에 가 포함된 줄을 작성합니다.
$2 " " //\\/
7. 두 번째 필드에 가 포함된 줄을 작성합니다. 참고하세요
- 이스케이프는 두 번 해석됩니다. 문자열의 어휘 처리 중 한 번
정규식을 처리할 때 다음을 수행합니다.
$2 " " "\\\\"
8. 각 줄의 마지막 필드와 마지막 필드에 두 번째를 씁니다. 필드를 다음으로 구분합니다.
:
{OFS=":";인쇄 $(NF−1), $NF}
9. 줄 번호와 각 줄의 필드 수를 적습니다. 세 개의 끈
줄 번호를 나타내는 과 필드 개수가 연결되어 있음
해당 문자열은 표준 출력에 기록됩니다.
{인쇄 NR "" NF}
10. 72자보다 긴 줄을 작성합니다.
길이($0) > 72
11. 처음 두 필드를 반대 순서로 구분하여 작성합니다. FSO:
{ 인쇄 $ 2, $1 }
12. 입력 필드가 또는 및 문자로 구분된 경우와 동일합니다. 또는
둘 다:
BEGIN { FS = ",[ \t]*|[ \t]+" }
{ 인쇄 $ 2, $1 }
13. 첫 번째 열을 더하고 합계와 평균을 인쇄합니다.
{s += $1 }
END {인쇄 "합집합 is ", s, " 평균 이다", 초/NR}
14. 한 줄에 하나씩 필드를 역순으로 작성합니다(각 줄에 여러 줄이 표시됨).
{ for (i = NF; i > 0; −−나) 인쇄 $i }
15. 문자열 발생 사이의 모든 행을 작성하십시오. 스타트 and 중지:
/시작/, /멈추다/
16. 첫 번째 필드가 이전 필드와 다른 모든 줄을 작성합니다.
$1 != 이전 { 인쇄; 이전 = $1 }
17. 시뮬레이션 에코:
BEGIN {
for (i = 1; i < ARGC; ++나)
printf("%s%s", ARGV[i], i==ARGC−1?"\n":" ")
}
18. 다음에 포함된 경로 접두어를 작성합니다. PATH 환경 변수(한 줄에 하나씩):
BEGIN {
n = 분열 (ENVIRON["경로"], 통로, ":")
for (i = 1; i <= n; ++나)
인쇄 경로[i]
}
19. 라는 파일이 있는 경우 입력 다음 형식의 페이지 헤더가 포함되어 있습니다. 페이지 #
그리고 이름이 지정된 파일 프로그램 여기에는 다음이 포함됩니다.
/페이지/ { $2 = n++; }
{ 인쇄 }
그런 다음 명령줄:
AWK -f 프로그램 N = 5 입력
파일을 인쇄합니다 입력, 5부터 시작하는 페이지 번호를 입력합니다.
이론적 해석
이 설명은 새로운 내용을 기반으로 합니다. AWK, ``nawk'', (참조된 내용 참조) 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK
프로그램 작성 지원하는 언어), 이는 역사적으로 여러 가지 새로운 기능을 도입했습니다. AWK:
1. 새로운 키워드: 삭제, do, 기능, return
2. 새로운 내장 기능: 아탄2, 가까운, 코사인, gsub, 일치, 랜드, 죄, 시끄러운, 이하, 체계
3. 새로운 사전 정의된 변수: FNR, ARGC, ARRGV, 시작, 길이, 서브셉
4. 새로운 표현식 연산자: ?, :, ,, ^
5. 그만큼 FS 변수와 세 번째 인수 분열, 이제 확장 일반으로 처리됩니다.
표현.
6. 연산자 우선순위가 C 언어에 더 가깝게 변경되었습니다. 두 가지 예
다르게 작동하는 코드는 다음과 같습니다.
동안 ( n /= 10 > 1) ...
if (!"주" ~ /bwk/) ...
최신 구현을 기반으로 여러 기능이 추가되었습니다. AWK:
* 여러 인스턴스 -f 프로그램 파일 허용됩니다.
* 새로운 옵션 -v 할당.
* 새로운 사전 정의된 변수 환경.
* 새로운 내장 기능 토퍼 and 낮추다.
* 더 많은 서식 기능이 추가되었습니다. printf ISO C 표준과 일치합니다.
전체 AWK 구문은 항상 C 언어를 기반으로 했으며 다음의 몇 가지 기능이 포함되어 있습니다.
쉘 명령 언어 및 기타 소스. 이로 인해 완전히 그렇지는 않습니다.
다른 언어와 호환되므로 일부 사용자에게 혼란을 야기했습니다. 그렇지 않다
그러한 문제를 해결하려는 표준 개발자의 의도. 비교적 사소한 몇 가지
언어가 ISO C 표준과 더욱 호환되도록 변경되었습니다. 최대
이러한 변경 사항 중 일부는 설명된 대로 최근 구현의 유사한 변경 사항을 기반으로 합니다.
위에. C 언어 규칙에 포함되지 않은 몇 가지 C 언어 규칙이 남아 있습니다. AWK.
주목할만한 것은 여러 항목을 지정하는 데 일반적으로 사용되는 연산자입니다.
C 언어의 표현 for 성명. 또한, 다양한 장소가 있습니다. AWK is
사용할 수 있는 표현식 유형에 관해 C 언어보다 더 제한적입니다.
주어진 맥락. 이러한 제한은 다음과 같은 다양한 기능으로 인해 발생합니다. AWK 언어
제공합니다.
정규식 AWK 역사적인 구현에서 다음으로 다소 확장되었습니다.
POSIX.1‐2008에 정의된 대로 확장 정규식의 순수 상위 집합으로 만듭니다(참조:
POSIX.1-2008의 기본 정의 볼륨, 섹션 9.4, 확장 정규병 식).
주요 확장은 국제화 기능과 간격 표현식입니다. 역사적인
구현 AWK 확장 기능으로 -이스케이프 시퀀스를 오랫동안 지원해 왔습니다.
확장 정규식, 이 확장은 불일치에도 불구하고 유지되었습니다.
다른 유틸리티와 함께. 확장 정규식에서 인식되는 이스케이프 시퀀스의 수
표현식과 문자열은 구현마다 다양합니다(일반적으로 시간이 지남에 따라 증가).
POSIX.1‐2008에 지정된 세트에는 대중적으로 지원되는 것으로 알려진 대부분의 시퀀스가 포함되어 있습니다.
구현 및 ISO C 표준을 따릅니다. 지원되지 않는 시퀀스 중 하나는 다음과 같습니다.
XNUMX진수 값은 다음으로 시작하여 이스케이프됩니다. '\NS'. 이를 통해 더 많은 값을 표현할 수 있습니다.
9비트 이상 사용 AWK ISO C 표준과 같습니다. 그러나 이 구문 때문에
비결정적 길이를 가지면 후속 문자가 다음 문자가 되는 것을 허용하지 않습니다.
XNUMX진수. 이 제한은 C 언어에서 다음을 사용하여 처리할 수 있습니다.
어휘 문자열 연결. 에서 AWK 언어, 연결도 해결책이 될 수 있습니다
문자열의 경우, 확장 정규식(어휘적 ERE 토큰 또는
정규식으로 동적으로 사용되는 문자열). 이러한 제한으로 인해 이 기능은
POSIX.1‐2008에는 추가되지 않았습니다.
확장 정규식이 일반적으로 사용되는 상황에서 문자열 변수가 사용되는 경우
(어휘 토큰 ERE가 문법에서 사용되는 경우) 문자열에 포함되지 않은 경우
리터럴 문자.
일부 버전 AWK 다음 형식을 허용합니다.
펑크 이름(인수, ... ) { 문 }
이것은 언어 작성자에 의해 더 이상 사용되지 않으며, 그렇지 않도록 요청했습니다.
지정되었습니다.
의 역사적 구현 AWK 다음과 같은 경우 오류가 발생합니다. 다음 것 명령문은 다음에서 실행됩니다.
BEGIN 행동과 원인 AWK 다음과 같은 경우 종료 다음 것 명령문은 다음에서 실행됩니다. END 액션.
이 동작은 문서화되지 않았으며 이를 수행할 필요가 없다고 생각됩니다.
표준화하세요.
문자열과 숫자 값 간의 변환 사양이 훨씬 더 자세합니다.
역사적 구현 문서나 참조 문서보다 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK
프로그램 작성 지원하는 언어. 대부분의 동작은 직관적으로 설계되었지만
다양한 구현에서 호환 가능한 동작을 보장하려면 세부 정보가 필요합니다. 이것
피연산자의 유형이 관계식에서 특히 중요합니다.
문자열 또는 숫자 비교가 수행되는지 여부를 결정합니다. 의 관점에서 보면
애플리케이션 개발자라면 일반적으로 직관적인 동작을 기대하고 강제로 실행하는 것으로 충분합니다.
표현식 유형이 변환되는 경우(XNUMX을 추가하거나 널 문자열을 연결하여)
필요한 것과 분명히 일치하지 않습니다. 의도는 역사적 사실을 명시하는 것이었습니다.
거의 모든 경우에 연습하십시오. 한 가지 예외는 역사적 구현에서
변수와 상수는 문자열과 숫자 값을 모두 원래 값 이후로 유지합니다.
어떤 용도로든 변환됩니다. 즉, 변수나 상수를 참조하는 것은
예상치 못한 부작용. 예를 들어, 과거 구현에서는 다음과 같습니다.
프로그램 :
{
a = "+2"
b = 2
if (NR % 2)
c = a + b
if (a == b)
인쇄 "숫자 비교"
그렇지 않으면
인쇄 "끈 비교"
}
각 홀수에 대해 숫자 비교를 수행하고 숫자 비교를 출력합니다.
각 짝수에 대해 문자열 비교(및 출력 문자열 비교)를 수행합니다.
번호가 매겨진 줄. POSIX.1‐2008은 필요한 경우 비교가 숫자로 이루어지도록 보장합니다. 와 함께
역사적 구현, 다음 프로그램:
BEGIN {
OFMT = "%이자형"
인쇄 3.14
OFMT = "%에프"
인쇄 3.14
}
출력 할 것이다 "3.140000e+00" 두 번, 왜냐면 두 번째에는 인쇄 상수를 진술하다
"3.14" 이전 변환의 문자열 값을 갖게 됩니다. POSIX.1‐2008에서는 다음을 요구합니다.
두 번째 출력 인쇄 진술은 "3.140000". 역사적 행동
구현은 너무 직관적이지 않고 예측할 수 없는 것으로 간주되었습니다.
초기 초안에 포함된 규칙을 사용하면 다음 스크립트가
아무것도 인쇄하지 않습니다.
BEGIN {
와이[1.5] = 1
OFMT = "%이자형"
인쇄 와이[1.5]
}
따라서 새로운 변수, CONVFMT, 소개되었습니다. 그만큼 OFMT 이제 변수는 다음으로 제한됩니다.
숫자를 문자열로 변환하는 출력에 영향을 미치며 CONVFMT 내부용으로 사용됩니다
비교 또는 배열 인덱싱과 같은 변환. 기본값은 그것과 같습니다.
for OFMT, 따라서 프로그램이 변경되지 않는 한 CONVFMT (어떤 역사 프로그램도 할 수 없는 일입니다)
내부 문자열 변환과 관련된 기록 동작을 수신합니다.
더 포식스 AWK 어휘 및 구문 규칙이 다른 규칙보다 더 공식적으로 지정됩니다.
소스. 다시 한 번 의도는 역사적 관행을 지정하는 것이었습니다. 하나의 규칙
다른 언어적 설명에서처럼 형식적 문법에서 명확하지 않아야 합니다.
문자는 허용됩니다. 종료와 같은 몇 가지 명백한 배치가 있습니다.
문 사이에 문자를 이스케이프하는 데 를 사용할 수 있습니다.
어휘 토큰. 또한 문자가 없는 문자는
쉼표, 여는 중괄호, 논리 AND 연산자("&&"), 논리 OR 연산자
("||") do 키워드, 그렇지 않으면 키워드 및 닫는 괄호 if, for 및
동안 성명서. 예를 들면 :
{ 인쇄 $ 1,
$2 }
요건 AWK 프로그램 인수 텍스트에 후행 을 추가합니다.
문법을 단순화하여 형식의 텍스트 파일과 일치시킵니다. 방법은 없습니다
리터럴 이 추가되었는지 또는 AWK
그냥 그랬던 것처럼 행동합니다.
POSIX.1‐2008을 지원하려면 과거 구현에서 몇 가지 변경이 필요합니다.
국제화. 아마도 가장 미묘한 것은 소수점을 사용하는 것일 것이다.
에 의해 정의된 문자 LC_숫자 로캘의 범주, 표현
부동 소수점 숫자. 이 로캘별 문자는 숫자를 인식하는 데 사용됩니다.
입력, 문자열과 숫자 값 간 변환, 출력 형식 지정.
그러나 로케일에 관계없이 문자(소수점 문자)는
POSIX 로캘)은 처리 시 인식되는 소수점 문자입니다. AWK 프로그램
(명령줄 인수의 할당 포함) 이는 본질적으로 동일한 규칙입니다.
ISO C 표준에서 사용되는 것과 같습니다. 차이점은 C 언어에 다음이 포함되어 있다는 것입니다.
로케일 설정() 함수는 애플리케이션이 해당 로케일을 수정할 수 있도록 허용합니다. 이것 때문에
기능을 사용하면 C 응용 프로그램은 C 로캘로 설정된 로캘로 실행을 시작합니다.
명시적인 호출 후 환경에 지정된 로케일에서 실행됩니다. 로케일 설정().
그러나 이러한 정교한 새 기능을 AWK 언어는 다음과 같이 보였다.
POSIX.1‐2008에는 부적합합니다. 실행이 가능하다 AWK 명시적으로 프로그램
쉘에서 환경을 설정하여 원하는 로케일을 지정하십시오.
확장 정규 표현식의 NUL로 인해 발생하는 정의되지 않은 동작으로 인해 향후
GNU용 확장 둔한 사람 바이너리 데이터를 처리하는 프로그램입니다.
유효하지 않은 경우의 동작 AWK 프로그램(어휘, 구문,
의미 오류)는 구현을 과도하게 제한하는 것으로 간주되었기 때문에 정의되지 않았습니다.
지정합니다. 대부분의 경우 이러한 오류로 인해 진단 결과가 나오지만 다른 결과가 나오지 않을 것으로 예상할 수 있습니다.
종료 상태가 XNUMX입니다. 그러나 일부 구현에서는 다음과 같은 방식으로 언어를 확장하도록 선택할 수 있습니다.
특정 유효하지 않은 구성을 사용하는 것입니다. 다른 유효하지 않은 구성으로 간주될 수 있습니다.
경고할 가치가 있지만 그렇지 않으면 합리적인 행동을 유발할 수 있습니다. 또 다른 구성
일부 구현에서는 감지하기가 매우 어려울 수 있습니다. 또한 다양한 구현
프로그램을 처음 구문 분석하는 동안(어떤 내용을 읽기 전에) 주어진 오류를 감지할 수 있습니다.
입력 파일) 다른 사람들은 일부를 읽은 후 프로그램을 실행할 때 이를 감지할 수 있습니다.
입력. 구현자는 가능한 한 빨리 오류를 진단하고
유용한 진단을 생성하면 응용 프로그램 디버깅이 쉬워지고
구현이 더 유용해졌습니다.
다중 문자 사용으로 인한 지정되지 않은 동작 RS 가치는 가능한 미래를 허용하는 것이다
레코드 구분 기호에 사용되는 확장 정규식을 기반으로 하는 확장입니다. 역사적인
구현에서는 문자열의 첫 번째 문자를 취하고 나머지 문자는 무시합니다.
다음의 경우 지정되지 않은 동작 분열(현,정렬,)은 제안된 미래를 허용하는 데 사용됩니다.
문자열을 개별 문자 배열로 분할하는 확장입니다.
맥락에서 Getline 함수, 다양한 우선순위에 대해 똑같이 좋은 인수
의 | and < 연산자를 만들 수 있습니다. 역사적 관행은 다음과 같습니다.
Getline < "ㅏ" "비"
다음과 같이 구문 분석됩니다.
( Getline < "ㅏ" ) "비"
많은 사람들이 파일을 삭제하려는 의도가 있다고 주장하지만 ab 읽어야합니다. 하지만:
Getline < "엑스" + 1
다음과 같이 구문 분석합니다.
Getline < ( "엑스" + 1 )
비슷한 문제가 발생합니다. | 버전 Getline, 특히 다음과 결합하여 $.
예 :
$"에코 안녕하세요 " | Getline
(이 상황은 다음과 같은 용도로 사용될 때 특히 문제가 됩니다. 인쇄 진술, 여기서
|getline 부분은 인쇄.)
대부분의 경우 이러한 구성은 사용되지 않거나 적어도 사용되어서는 안 됩니다.
기존의 구문 분석이 없는 자연스러운 모호성을 갖고 있음), 이러한 의미는
구문이 명시적으로 지정되지 않은 상태로 만들어졌습니다. (효과는 일치하는 것입니다.
문제가 발생하는 응용 프로그램은 모호성을 해결하기 위해 괄호로 묶어야 합니다.)
그러한 구조를 실제로 사용하는 경우는 거의 없는 것으로 나타났습니다.
이러한 상황에서 오류를 일으키는 문법을 작성할 수 있습니다. 어디
이전 버전과의 호환성은 큰 고려 사항이 아니며 구현자는 이러한 기능을 사용하기를 원할 수 있습니다.
문법.
일부 역사적 구현에서는 일부 내장 함수를 없이 호출할 수 있었습니다.
인수 목록, 결과는 일부 "합리적인"에서 선택된 기본 인수 목록입니다.
방법. 사용 길이 의 동의어로 길이($0) 이 형식 중 유일한 형식은 다음과 같습니다.
널리 알려져 있거나 널리 사용되는 것으로 생각되는 것; 이 특정 양식은 다양한 문서에 문서화되어 있습니다.
장소(예: 가장 역사적인 AWK 참조 페이지(참조 페이지에는 없음)
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 AWK 프로그램 작성 지원하는 언어) 합법적인 관행으로 간주됩니다. 이 예외를 제외하면 기본값
인수 목록은 항상 문서화되지 않았고 모호하게 정의되어 왔으며 전혀 그렇지 않습니다.
사용자 정의 함수로 일반화하는 방법(또는 경우)을 명확하게 합니다. 그들은 유용하지 않습니다
기능을 지정하고 기능 이름을 지정해야 할 수 있는 향후 확장을 배제합니다.
전화하지 않고. 표준화하지 않는 것이 가장 간단한 방법인 것 같습니다. 표준
개발자들은 그렇게 생각했다 길이 그러나 이후부터 특별대우를 받을 수 있다.
과거에 문서화되었으며 역사적 프로그램에서 상당한 사용 가능성이 있는 것으로 보입니다.
따라서 이 사용법은 합법적이 되었지만 Issue 5에서는 더 이상 사용되지 않는 사용법을 제거했습니다.
XSI 준수 구현 및 기타 여러 준수 응용 프로그램에 대한 표시
이 기능에 의존합니다.
In 이하 and gsub만약 답장 문자열 리터럴입니다(어휘 토큰 STRING), 그 다음 두 개
단일 문자를 문자열에 사용하려면 연속된 문자를 사용해야 합니다.
결과 문자열이 전달될 때 는 앞에 옵니다.
기능. (예를 들어 대체 문자열에 하나의 리터럴 를 지정하려면 다음을 사용합니다.
gsub(오히려, "\\&").)
역사적으로 유일한 특수 문자입니다. 답장 인수 이하 and gsub 현
함수는 ('&') 문자를 입력하고 그 앞에 를 붙입니다.
문자는 특별한 의미를 끄는 데 사용되었습니다.
ISO POSIX‐2:1993 표준의 설명에는 다음과 같은 동작이 도입되었습니다.
문자는 또 다른 특수 문자였으며 해당 문자가 있는지 여부는 지정되지 않았습니다.
다른 특수 문자는 없었습니다. 이 설명은 여러 가지 이식성을 도입했습니다.
문제 중 일부는 아래에 설명되어 있으므로 더 많은 문제로 대체되었습니다.
역사적 설명. 일부 문제는 다음과 같습니다.
* 역사적으로 대체 문자열을 생성하기 위해 스크립트는 다음을 사용할 수 있었습니다. gsub(오히려, "\\&"),
그러나 ISO POSIX‐2:1993 표준 표현에서는 다음을 사용해야 했습니다. gsub(오히려,
"\\\\&"). 모든 문자열 리터럴이 다음과 같기 때문에 여기서 문자는 두 배가 됩니다.
문자의 각 쌍을 다음으로 줄이는 어휘 분석이 적용됩니다.
전달되기 전에 단일 gsub.
* 특수문자가 무엇인지 명시되지 않았기 때문에, 이식 가능한 스크립트의 경우
문자가 문자 그대로 인쇄되도록 보장하려면 각 문자가 앞에 와야 했습니다.
를 사용하세요. (예를 들어 이식 가능한 스크립트는 다음을 사용해야 했습니다. gsub(오히려, "\\안녕")에
대체 문자열을 생성합니다. "안녕".)
ISO POSIX‐2:1993 표준의 비교 설명이 제대로 설명되지 않았습니다.
숫자 문자열을 숫자로 비교하는 방식 때문에 역사적 관행이 생겼습니다. 그만큼
현재 규칙으로 인해 다음 코드가 발생합니다.
if (0 == "000")
인쇄 "이상한, 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만 진실"
그렇지 않으면
인쇄 "아니다 진실"
숫자 비교를 수행하면 if 성공하기 위해. 직관적으로 명확해야 합니다.
이는 잘못된 동작이며 실제로는 역사적으로 구현되지 않았습니다. AWK 실제로
이런 식으로 행동합니다.
이 문제를 해결하려면 숫자 현 해당 항목만 포함하도록 개선되었습니다.
특정 상황(주로 외부 소스)에서 얻은 값이 아닌 경우
값이 문자열인지 아니면 문자열인지를 명확하게 결정할 수 있습니다.
숫자.
숫자 문자열에 할당된 변수도 숫자 문자열로 처리됩니다.
(예를 들어 숫자 문자열의 개념은 할당 전체에 전파될 수 있습니다.)
비교 시 초기화되지 않은 값을 갖는 모든 변수는 숫자로 처리됩니다.
숫자 값 XNUMX으로 평가되는 피연산자입니다.
초기화되지 않은 변수에는 스칼라, 배열 요소,
그리고 들판. 초기화되지 않은 값의 정의 변수 and 이달의 스페셜 변수 is
초기화되지 않은 변수와 필드에 배치된 값을 설명하는 데 필요합니다.
유효한(예: < $NF) 그러나 문자가 없으며 이러한 문자가 어떻게 나타나는지 설명합니다.
변수는 비교에 사용됩니다. 다음과 같은 유효한 필드 $1, 문자가 없습니다.
이는 다음의 입력 라인에서 얻을 수 있습니다. "\t\t" 언제 FS='\t'. 역사적으로,
비교 ($110) 평가 후 수치적으로 이루어졌다. $1 값이 XNUMX이 됩니다.
"...또한 숫자 문자열의 숫자 값을 가져야 합니다"라는 문구가 제거되었습니다.
ISO POSIX‐2:1993 표준의 여러 섹션에서 불필요한 부분을 지정했기 때문입니다.
구현 세부 사항. POSIX.1‐2008에서는 이러한 객체를 지정할 필요가 없습니다.
두 가지 다른 값이 할당됩니다. 이러한 개체가 다음을 수행할 수 있도록 지정하기만 하면 됩니다.
상황에 따라 두 가지 다른 값으로 평가됩니다.
의 역사적 구현 AWK XNUMX진수 정수 또는 부동 상수를 구문 분석하지 않았습니다.
처럼 "0xa" and "0xap0". 실수로 인해 이 책의 2001년부터 2004년판까지
XNUMX진수 부동 상수에 대한 표준 필수 지원입니다. 이는 다음과 같은 이유 때문이었습니다.
참조 아토프(). 이 버전의 표준은 허용하지만 요구하지는 않습니다.
사용할 구현 아토프() 부동 소수점 숫자가 어떻게 작동하는지에 대한 설명이 포함되어 있습니다.
역사적 행동과 일치하는 대안으로 인식됩니다. 이번 변경의 목적은 다음과 같습니다.
구현이 다음 중 하나에 따라 부동 소수점 상수를 인식할 수 있도록 허용합니다.
ISO/IEC 9899:1990 표준 또는 ISO/IEC 9899:1999 표준 및 허용(필수는 아님)
XNUMX진수 정수 상수를 인식하기 위한 구현입니다.
의 역사적 구현 AWK 부동 소수점 무한대와 NaN을 지원하지 않았습니다.
숫자 문자열; 예 : "-INF" and "NaN". 그러나 아토프() 또는
strtod() 변환을 수행하는 함수는 다음을 사용한 경우 이러한 값에 대한 지원을 선택했습니다.
ISO/IEC 9899:1999 표준 대신 기능의 ISO/IEC 9899:1990 표준 버전
버전. 실수로 인해 이 표준의 2001년부터 2004년판은
무한대 및 NaN에 대한 지원을 허용하지만 이 개정판에서는 지원이 허용됩니다(그러나
필수의). 이는 행동에 대한 조용한 변화입니다. AWK 프로그램들; 예를 들어,
POSIX 로케일 표현식:
("-INF" + 0 < 0)
이전에는 값이 0이었기 때문에 "-INF" 0으로 변환되었지만 이제는 값이 0이거나
1.
미래 오시는 길
없음.
onworks.net 서비스를 사용하여 온라인으로 awkposix 사용