AWK
AWK패러다임 | 스크립트, 프로시저, 데이터[1] 기반 |
---|---|
설계자 | 알프레드 아호, 피터 와인버거, 브라이언 커니건 |
처음 등장한 | 전 ( |
안정된 릴리스 | IEEE 규격 1003.1-2008 (POSIX) / 1985 |
타이핑 분야 | none, 문자열, 정수 및 부동소수점 숫자를 처리할 수 있습니다.정규 표현 |
OS | 크로스 플랫폼 |
주요 구현 | |
awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK(컴파일러), Awka(컴파일러) | |
사투리 | |
old awk oak 1977, new awk nawk 1985, GNU awk gawk | |
영향을 받다 | |
C, sed, SNOBOL[2][3] | |
영향받은 | |
TCL, AMP, Perl, Korn 쉘(ksh93, dtksh, tksh), Lua |
AWK(awk)[4]는 텍스트 처리를 위해 설계된 도메인 고유의 언어이며 일반적으로 데이터 추출 및 보고서 도구로 사용됩니다.sed 및 grep와 마찬가지로 [4]필터이며 대부분의 Unix 계열 운영 체제의 표준 기능입니다.
AWK 언어는 형식화된 보고서 작성 등 텍스트 추출 또는 변환을 위해 텍스트 데이터 스트림에 대해 직접 실행하거나 파이프라인의 일부로 사용되는 일련의 액션으로 구성된 데이터 기반 스크립트 언어입니다.이 언어에서는 문자열 데이터 유형, 연관 배열(키 문자열로 인덱싱된 배열) 및 정규 표현을 광범위하게 사용합니다.AWK는 제한된 용도 도메인을 가지고 있으며 원라이너 프로그램을 지원하도록 특별히 설계되었지만 언어는 튜링 완전하며 AWK의 초기 Bell Labs 사용자들도 종종 잘 구성된 대형 AWK 프로그램을 [5]작성했습니다.
AWK는 1970년대에 [6][better source needed]Bell Labs에서 설립되었으며, 그 이름은 작가 Alfred Aho, Peter Weinberger, Brian Kernighan의 성에서 따왔다.약어는 AWK 프로그래밍 언어 [7]표지에 있는 bird auk과 같은 발음으로 발음된다.모두 소문자로 표기할 경우 다음과 같이 입력합니다.awk
AWK 프로그래밍 언어로 작성된 스크립트를 실행하는 Unix 또는 Plan 9 프로그램을 말합니다.
역사
AWK는 1977년 Alfred Aho(egrep의 저자), Peter J. Weinberger(작은 관계형 데이터베이스 작업자), Brian Kernighan에 의해 처음 개발되었습니다.AWK는 각각의 이니셜에서 이름을 따왔다.Kernighan에 따르면 AWK의 목표 중 하나는 숫자와 문자열을 쉽게 조작할 수 있는 도구를 갖는 것이었다.AWK는 입력 데이터의 패턴을 검색하기 위해 사용된 Marc Rochkind의 프로그래밍 언어에서 영감을 얻어 [8]yacc를 사용하여 구현되었습니다.
AWK는 버전7 Unix에 등장한 초기 도구 중 하나로 표준 Unix 환경에서 사용할 수 있는 유일한 스크립트 언어인 Bourne 쉘 외에 Unix 파이프라인에 연산 기능을 추가했습니다.이것은 단일 UNIX [9]사양의 필수 유틸리티 중 하나이며 Linux Standard Base [10]사양에 필요합니다.
AWK는 1985-88년에 대폭 개정 및 확장되어 [11]1988년에 출시된 Paul Rubin, Jay Fenlason 및 Richard Stallman에 의해 작성된 GNU AWK 구현이 되었습니다.GNU AWK는 GNU 기반의 Linux 패키지에 포함되어 있기 때문에 가장 널리 배포되는[12] 버전일 수 있습니다.GNU AWK는 [11]1994년부터 Arnold Robbins에 의해서만 유지되고 있습니다.Brian Kernighan의 nawk(New AWK) 소스는 1993년에 공개되지 않고 1990년대 후반부터 공개되었습니다.많은 BSD 시스템은 GPL [11]라이선스를 피하기 위해 이를 사용합니다.
AWK는 SED(1974년)가 선행했다.둘 다 텍스트 처리를 위해 설계되었습니다.이들은 라인 지향, 데이터 중심 패러다임을 공유하며, 암묵적인 메인 루프 및 전류 라인 변수 때문에 원라이너 프로그램 작성에 특히 적합합니다.초기 AWK 프로그램의 파워와 간결함, 특히 한 줄짜리 변수를 통한 강력한 정규 표현 처리와 일관성은 당시 AWK의 한계와 함께 Perl 언어(1987년)에 중요한 영감을 주었습니다.1990년대에 Perl은 유닉스 텍스트 처리 언어 분야에서 AWK와 경쟁하면서 매우 유명해졌다.
AWK 프로그램 구조
AWK는 입력을 한 번에 한 줄씩 읽습니다.프로그램내의 각 패턴에 대해서 행이 스캔 되고, 일치하는 각 패턴에 대해서 관련 액션이 실행된다.
--
AWK 프로그램은 일련의 패턴 액션쌍으로 다음과 같이 기술되어 있습니다.
조건. { 액션. } 조건. { 액션. } ...
여기서 condition은 일반적으로 표현식이고 action은 일련의 명령어입니다.입력은 레코드로 분할됩니다.기본적으로 레코드는 줄바꿈 문자로 구분되어 입력이 행으로 분할됩니다.프로그램은 각 레코드가 각 조건에 대해 차례로 테스트되고 참인 각 식에 대해 액션이 실행됩니다.조건 또는 액션을 생략할 수 있습니다.이 조건은 기본적으로 모든 레코드와 일치합니다.기본 액션은 레코드를 인쇄하는 것입니다.이것은 sed와 같은 패턴-액션 구조입니다.
다음과 같은 간단한 AWK 표현과 더불어foo == 1
또는/^foo/
조건은 다음과 같습니다.BEGIN
또는END
모든 레코드를 읽기 전 또는 읽은 후에 액션이 실행되도록 합니다.또는 pattern1과 일치하는 레코드에서 시작하여 pattern2와 일치하는 레코드를 포함하는 pattern1과 일치하는 pattern2는 이후 행에서 pattern1과의 조회를 다시 시도합니다.
AWK 식에는 정규 산술 연산자와 논리 연산자 외에 칠드 연산자도 포함됩니다.~
문자열과 정규 표현을 대조합니다.편리한 구문설탕으로서 /regexp/는 tilde 연산자를 사용하지 않고 현재 레코드와 일치합니다.이 구문은 sed에서 파생되어 ed 에디터에서 상속됩니다./
를 검색에 사용합니다.슬래시를 정규 표현의 딜리미터로 사용하는 이 구문은 이후 Perl 및 ECMAScript에서 채택되어 현재는 일반적입니다.tilde 연산자는 Perl에서도 채택되었습니다.
명령어
AWK 명령어는 위의 예에서 액션을 대체하는 명령어입니다.AWK 명령에는 함수 호출, 변수 할당, 계산 또는 이들의 조합을 포함할 수 있습니다.AWK에는 많은 기능이 내장되어 있습니다.다양한 AWK의 다양한 맛에 의해 많은 기능이 제공됩니다.또한 일부 플레이버는 동적으로 연결된 라이브러리를 지원하므로 더 많은 기능을 제공할 수 있습니다.
print 명령어
print 명령어는 텍스트 출력에 사용됩니다.출력 텍스트는 항상 Output Record Separator(ORS; 출력 레코드 분리기)라고 불리는 정의된 문자열로 끝납니다.기본값은 newline 입니다.이 명령어의 가장 간단한 형식은 다음과 같습니다.
print
- 현재 레코드의 내용이 표시됩니다.AWK 에서는, 레코드는 필드로 분할되어 개별적으로 표시할 수 있습니다.
print $1
- 현재 레코드의 첫 번째 필드를 표시합니다.
print $1, $3
- 현재 레코드의 첫 번째 필드와 세 번째 필드를 Output Field Separator(OFS; 출력 필드 구분자)라고 불리는 정의된 문자열로 구분하여 표시합니다.기본값은 1개의 공백 문자입니다.
이러한 필드($X)는 변수($기호는 Perl의 변수를 나타냄)와 유사할 수 있지만 실제로는 현재 레코드의 필드를 나타냅니다.특별한 경우 $0은 전체 기록을 의미합니다.실제로 명령어는print
" 및 "print $0
기능은 동일합니다.
print 명령어는 계산 및/또는 함수 호출의 결과도 표시할 수 있습니다.
/regex_pattern/ { # 레코드(행)가 위의 regex_pattern과 일치하는 경우 실행하는 액션 인쇄물 3+2 인쇄물 푸바(3) 인쇄물 푸바(변수) 인쇄물 죄(3-2) }
출력은, 다음의 파일에 송신할 수 있습니다.
/regex_pattern/ { # 레코드(행)가 위의 regex_pattern과 일치하는 경우 실행하는 액션 인쇄물 '감정' > "파일 이름" }
또는 파이프를 통해:
/regex_pattern/ { # 레코드(행)가 위의 regex_pattern과 일치하는 경우 실행하는 액션 인쇄물 '감정' "명령어" }
삽입 변수
Awk의 내장 변수에는 $1, $2, $3 등의 필드 변수가 포함됩니다(0은 전체 레코드를 나타냅니다).레코드의 개별 텍스트 필드의 텍스트 또는 값을 유지합니다.
기타 변수는 다음과 같습니다.
NR
: 레코드 수.모든 데이터 파일에서 지금까지 읽은 입력 레코드 수의 현재 카운트를 유지합니다.0부터 시작하지만 자동으로 [14]0으로 리셋되지 않습니다.FNR
: 파일 레코드 번호.현재 파일에서 지금까지 읽은 입력 레코드 수의 현재 수를 유지합니다.이 변수는 새 파일이 [14]시작될 때마다 자동으로 0으로 재설정됩니다.NF
: 필드 수.현재 입력 레코드의 필드 수를 포함합니다.입력 레코드의 마지막 필드는 $NF, 두 번째에서 마지막 필드는 $(NF-1), 세 번째에서 마지막 필드는 $(NF-2) 등으로 지정할 수 있습니다.FILENAME
: 현재 입력 파일의 이름을 포함합니다.FS
: 필드 구분자.입력 레코드의 필드를 분할하는 데 사용되는 "필드 구분 기호"를 포함합니다.기본 "white space"에서는 공백 및 탭 문자를 사용할 수 있습니다.FS를 다른 문자 또는 문자 시퀀스로 재할당하여 필드 구분 기호를 변경할 수 있습니다.RS
: 레코드 구분자.현재 "레코드 구분자" 문자를 저장합니다.기본적으로 입력 행은 입력 레코드이므로 기본 레코드 구분 문자는 "newline"입니다.OFS
: 출력 필드 구분자.출력 필드 구분자를 저장합니다. 출력 필드 구분자는 Awk가 필드를 인쇄할 때 필드를 구분합니다.기본값은 공백 문자입니다.ORS
: 출력 레코드 구분자.Awk가 출력 레코드를 인쇄할 때 출력 레코드를 분리하는 "출력 레코드 분리기"를 저장합니다.기본값은 "newline" 문자입니다.OFMT
: 출력 형식.숫자 출력 형식을 저장합니다.기본 형식은 "%6g"입니다.
변수 및 구문
변수 이름에는 언어 키워드를 제외하고 임의의 문자 [A-Za-z0-9_]를 사용할 수 있습니다.연산자 + - * /는 각각 더하기, 빼기, 곱하기 및 나누기를 나타냅니다.문자열 연결의 경우 두 변수(또는 문자열 상수)를 서로 옆에 배치하기만 하면 됩니다.문자열 상수가 포함되어 있는 경우 공백은 옵션이지만 서로 인접한 두 변수 이름에는 공백이 필요합니다.큰따옴표는 문자열 상수를 구분합니다.문은 세미콜론으로 끝날 필요는 없습니다.마지막으로 #를 줄의 첫 번째 문자로 사용하여 프로그램에 주석을 추가할 수 있습니다.
사용자 정의 함수
C와 유사한 형식의 함수 정의는 키워드로 구성됩니다.function
함수명, 인수명 및 함수 본문.다음은 함수의 예입니다.
기능. add_3 (번호) { 돌아가다 번호 + 3 }
이 문은 다음과 같이 호출할 수 있습니다.
(양식) { 인쇄물 add_3(36) # 출력 '39' }
함수는 로컬 범위에 있는 변수를 가질 수 있습니다.이러한 이름은 인수 목록의 끝에 추가되지만 함수를 호출할 때는 값을 생략해야 합니다.파라미터의 끝과 로컬 변수의 시작을 나타내기 위해 인수 목록에 공백을 추가하는 것이 관례입니다.
예
안녕 세계
다음은 AWK로 작성된 관례적인 "Hello, world" 프로그램입니다.
시작한다. { 인쇄물 "안녕, 세상아!" 퇴장 }
80자를 넘는 행 인쇄
80자를 넘는 행은 모두 인쇄해 주세요.기본 액션은 현재 행을 인쇄하는 것입니다.
길이($0) > 80
단어를 세다
입력된 단어를 카운트하고 줄 수, 단어 수, 문자 수(wc 등)를 인쇄합니다.
{ 단어 += NF 문자 += 길이 + 1 # 각 레코드(행)의 끝에 줄바꿈 문자를 1개 추가합니다. } 끝. { 인쇄물 NR, 단어, 문자 }
프로그램의 첫 번째 행에는 패턴이 없기 때문에 입력의 각 행이 기본적으로 일치하므로 각 행마다 증분 액션이 실행된다.주의:words += NF
의 줄임말이다words = words + NF
.
마지막 말을 요약하다
{ s += $NF } 끝. { 인쇄물 s + 0 }
s는 $NF라는 수치만큼 증가합니다.$NF는 AWK의 필드 구분자(기본적으로는 공백)에 의해 정의된 행의 마지막 단어입니다.NF는 현재 행의 필드 수입니다.예를 들어 4달러는 네 번째 필드의 값이기 때문에 이 행의 필드 수 또는 주변 행보다 필드가 많거나 적거나 관계없이 $NF는 행의 마지막 필드의 값입니다.$는 실제로는 연산자 우선순위가 가장 높은 단항 연산자입니다(줄에 필드가 없는 경우 NF는 0, $0은 행 전체입니다. 이 경우 공백이 비어 있고 숫자 값도 0입니다).
입력의 마지막에 END 패턴이 일치하므로가 인쇄됩니다.단, 입력 행이 전혀 없는 경우가 있기 때문에(이 경우 값이 할당되지 않은 경우), 기본적으로는 빈 문자열이 됩니다.변수에 0을 추가하는 것은 문자열에서 숫자 값으로 강제하기 위한 AWK 관용어입니다(빈 문자열을 연결하는 것은 숫자에서 문자열로 강제하는 것입니다(예: " " )참고로 문자열을 연결하는 연산자는 없습니다.그냥 인접하게 배치되어 있습니다).프로그램이 강제로 빈 입력에 "0"을 인쇄하고, 이 입력이 없으면 빈 행이 인쇄됩니다.
입력 줄의 범위를 일치시킵니다.
NR % 4 == 1, NR % 4 == 3 { 인쇄물 %6d %s\n, NR, $0 }
액션 스테이트먼트에 의해서, 번호가 매겨진 각 행이 인쇄됩니다.printf 함수는 표준 C printf를 에뮬레이트하여 위에서 설명한 print 명령과 동일하게 동작합니다.단, 일치시키는 패턴은 다음과 같이 동작합니다.NR은 레코드 수(일반적으로 입력 행)입니다.AWK는 지금까지 읽었습니다.즉, 입력의 첫 번째 행에 대해 1로 시작하는 현재의 행 번호입니다.%는 모듈로 연산자입니다.NR % 4 == 1은 첫 번째, 다섯 번째, 아홉 번째 등의 입력 라인에 대해 참입니다.마찬가지로, NR % 4 == 3은 3, 7, 11 등 입력 라인에 대해 참입니다.범위 패턴은 첫 번째 부품이 라인 1에서 일치할 때까지 false이며 두 번째 부품이 라인 3에서 일치할 때까지 true로 유지됩니다.그런 다음 첫 번째 부분이 5행에서 다시 일치할 때까지 false 상태로 유지됩니다.
따라서, 프로그램은 1, 2, 3, 줄 건너뛰기 4, 그리고 5, 6, 7 등을 인쇄합니다.각 행에 대해서, 행 번호(6 문자폭의 필드)와 행의 내용을 인쇄합니다.예를 들어, 이 입력에 대해 실행되는 경우:
로마 플로렌스 밀라노 나폴리 토리노 베네치아
이전 프로그램은 다음과 같이 출력됩니다.
1 로마 2 플로렌스 3 밀라노 5 토리노 6 베니스
파일의 처음 부분 또는 마지막 부분 인쇄
특별한 경우로서 범위 패턴의 첫 번째 부분(예: 1)이 항상 참이면 범위가 입력 시작부터 시작됩니다.마찬가지로 두 번째 부분이 0과 같이 계속 거짓일 경우 입력이 끝날 때까지 범위가 계속됩니다.예를들면,
/^--여기서 잘라주세요--$/, 0
첫 번째 줄에서 정규 표현식 ^--cut here--$, 즉 "--cut here--" 문구를 포함하는 줄까지 입력 행을 인쇄합니다.
단어 빈도 계산
연관 배열을 사용한 워드 빈도:
시작한다. { FS=[^a-zA-Z]+" } { 위해서 (i=1; i<=>NF; i++) 단어[톨루어($i)]++ } 끝. { 위해서 (i 에 단어) 인쇄물 i, 단어[i] }
BEGIN 블록은 필드 구분자를 알파벳이 아닌 문자로 설정합니다.구분자는 정규 표현식일 수 있습니다.그 후 모든 입력 행에서 동작을 수행하는 베어 액션에 도달합니다.이 경우 행의 모든 필드에 대해 처음에 소문자로 변환된 단어가 나타나는 횟수에 1을 추가합니다.마지막으로 END 블록에서는 빈도로 단어를 출력합니다.회선
(i)의 경우
는 배열 워드를 통과하는 루프를 생성하여 배열의 각 첨자에 i를 설정합니다.이는 이러한 루프가 배열 내의 각 값을 통과하는 대부분의 언어와는 다릅니다.따라서 루프는 각 워드와 그 빈도 카운트를 출력합니다. tolower
는 이 책이 출판된 후 만들어진 One True awk(아래 참조)에 추가된 것입니다.
명령줄의 패턴 일치
이 프로그램은 여러 가지 방법으로 나타낼 수 있습니다.첫 번째는 본 셸을 사용하여 모든 작업을 수행하는 셸 스크립트를 만듭니다.다음 방법 중 가장 짧은 방법입니다.
#!/bin/sh pattern="$1" shift awk '/'$pattern'/{ print FINAME ": $0 }" "$@"
그$pattern
awk 명령어는 작은따옴표로 보호되지 않으므로 셸은 변수를 확장하지만 공백이 포함된 패턴을 적절하게 처리하려면 큰따옴표로 묶어야 합니다.통상적인 방법으로 패턴 자체가 행 전체를 체크합니다($0
)가 일치합니다. FILENAME
에 현재 파일명을 나타냅니다.awk에는 명시적인 연결 연산자가 없습니다.두 개의 인접한 문자열이 그것들을 연결합니다. $0
원래 변경되지 않은 입력 라인으로 확장됩니다.
다른 방법으로 쓸 수 있습니다.이 셸 스크립트는 awk 내에서 환경에 직접 액세스합니다.
#!/bin/sh export pattern="$1" shift awk '$0~ENVIEN["pattern"] {인쇄 파일 이름 ": $0 }" "$@"
이것은 다음 명령어를 사용하는 셸 스크립트입니다.ENVIRON
이 책이 출판된 후 새로운 버전의 One True awk에 도입된 어레이입니다.의 첨자ENVIRON
는 환경변수의 이름입니다.그 결과는 변수의 값입니다.이것은 다양한 표준 라이브러리와 POSIX의 getenv 함수입니다.셸 스크립트는 환경 변수를 만듭니다.pattern
첫 번째 인수를 포함하는 경우 해당 인수를 폐기하고 각 파일에서 패턴을 검색합니다.
~
왼쪽 피연산자가 오른쪽 피연산자와 일치하는지 확인합니다.!~
그 반대입니다.정규 표현은 문자열일 뿐이며 변수에 저장할 수 있습니다.
다음 방법에서는 명령줄 변수 할당을 사용합니다.이 경우 awk에 대한 인수는 변수에 대한 할당으로 간주할 수 있습니다.
#!/bin/sh pattern="$1" shift awk '$0~pattern { print FINAME ": $0 }' "pattern=$pattern" "$@"
또는 -var=value 명령줄 옵션(예: -v pattern="$pattern" ...)을 사용할 수 있습니다.
마지막으로 셸의 도움 없이 awk로 기술되어 있습니다.또한 awk 스크립트의 실장에 대해 (커맨드라인 1의 변수 할당과 마찬가지로) 너무 많은 것을 알 필요는 없습니다.다만, 조금 장황합니다.
시작한다. { 양식 = ARGV[1] 위해서 (i = 1; i < > ARGC; i++) # 첫 번째 인수 삭제 ARGV[i] = ARGV[i + 1] ARGC-- 한다면 (ARGC == 1) { # 패턴만이 유일한 것이므로 표준 입력에서 읽는 힘(책에서 사용) ARGC = 2 ARGV[1] = "-" } } $0 ~ 양식 { 인쇄물 파일명 ":" $0 }
그BEGIN
첫 번째 인수를 추출하는 것뿐만 아니라 이 인수를 파일명으로 해석하지 않도록 하기 위해서도 필요합니다.BEGIN
블록 엔드 ARGC
인수의 수는 항상 11이 됩니다.ARGV[0]
스크립트를 실행한 명령어 이름(대부분 문자열)입니다."awk"
또, 주의해 주세요.ARGV[ARGC]
빈 문자열입니다.""
.#
는, 행의 말미까지 전개하는 코멘트를 개시합니다.
주의:if
block.awk는 명령어를 실행하기 전에 표준 입력에서 읽어야 하는지 여부만 확인합니다.즉,
awk 'prog'
파일명이 없다는 사실이 확인되기 전에만 기능합니다.prog
실행 중!명시적으로 설정한 경우ARGC
awk는 단순히 입력 파일이 더 이상 존재하지 않는다고 느끼기 때문에 단순히 종료됩니다.따라서 특별한 파일 이름을 사용하여 표준 입력에서 읽도록 명시적으로 지시해야 합니다.-
.
자급식 AWK 스크립트
Unix와 같은 운영체제에서는 shebang 구문을 사용하여 자체 포함 AWK 스크립트를 구성할 수 있습니다.
예를 들어, 특정 파일의 내용을 인쇄하는 스크립트는 다음과 같은 파일을 생성하여 작성할 수 있습니다.print.awk
다음 내용을 포함합니다.
#!/usr/bin/awk -f { 인쇄물 $0 }
다음의 방법으로 기동할 수 있습니다../print.awk <filename>
그-f
는 AWK에 이어지는 인수가 AWK 프로그램을 읽을 수 있는 파일이며, 이는 sed에서 사용되는 플래그와 동일함을 나타냅니다.이러한 프로그램은 한 줄에 자주 사용되므로 기본적으로는 별도의 파일이 아닌 명령줄 인수로 지정된 프로그램을 실행합니다.
버전 및 구현
AWK는 원래 1977년에 작성되었으며 버전 7 Unix와 함께 배포되었습니다.
1985년에 저자들은 사용자 정의 기능을 추가함으로써 언어를 확장하기 시작했습니다.이 언어는 1988년에 출판된 The AWK Programming Language라는 책에 설명되어 있으며, UNIX System V의 릴리스에서 구현이 가능하게 되었습니다.호환되지 않는 이전 버전과의 혼동을 피하기 위해 이 버전을 "new awk" 또는 nawk라고 부르기도 했습니다.이 실장은 1996년에 무료 소프트웨어 라이선스로 출시되었으며 Brian Kernighan에 의해 유지되고 있습니다(아래 [citation needed]외부 링크 참조).
UNIX/32V 등 이전 버전의 UNIX 포함awkcc
AWK를 C로 변환했습니다.Kernighan은 awk를 C++로 바꾸는 프로그램을 작성했다; 그것의 상태는 [15]알려지지 않았다.
- BWK awk는 nawk라고도 불리며 Brian Kernighan의 버전을 말합니다.원래 언어를 기술한 책과 관련된 용어의 사용 및 커니건이 AWK의 [7]원작자 중 한 명이라는 사실 때문에 "One True AWK"로 불리게 되었다.FreeBSD는 이 버전을 One-true-awk라고 [16]부릅니다.또한 이 버전에는 책에 없는 다음과 같은 기능이 있습니다.
tolower
그리고.ENVIRON
위에서 설명한 바와 같습니다.자세한 내용은 소스 아카이브의 FIX 파일을 참조해 주세요.이 버전은 Android, FreeBSD, NetBSD, OpenBSD, macOS 및 일루미노 등에 의해 사용됩니다.Brian Kernighan과 Arnold Robbins는 nawk의 소스 저장소(github.com/onetrueawk/awk)의 주요 제공자입니다. - gawk(GNU awk)는 또 다른 자유 소프트웨어 구현이며 국제화 및 현지화 및 TCP/IP 네트워킹 구현에 심각한 진전을 보이는 유일한 구현입니다.이 문서는 원래 구현이 자유롭게 사용 가능하게 되기 전에 작성되었습니다.자체 디버거가 포함되어 있으며 프로파일러를 통해 사용자가 스크립트의 성능을 측정할 수 있습니다.또한 공유 라이브러리를 사용하여 기능을 확장할 수도 있습니다.일부 Linux 디스트리뷰션에는 기본 AWK [citation needed]구현으로 gawk가 포함되어 있습니다.
- mawk는 바이트 코드 인터프리터를 기반으로 한 Mike Brennan의 매우 빠른 AWK 구현입니다.
- libmawk는 mawk의 포크이며 어플리케이션은 awk 인터프리터의 여러 병렬 인스턴스를 포함할 수 있습니다.
- awka(프런트 엔드는 mawk 프로그램 상단에 기술되어 있습니다)는 AWK 스크립트를 C 코드로 변환하는 또 다른 사용자입니다.작성자의 libawka.a를 포함하여 정적으로 컴파일하면 결과 실행 파일의 속도가 상당히 빨라지고 작성자의 테스트에 따르면 AWK, Perl 또는 Tcl의 다른 버전과 매우 잘 비교됩니다.작은 스크립트는 160~170kB의 프로그램으로 바뀝니다.
- tawk(Thompson AWK)는 Solaris, DOS, OS/2 및 Windows용 AWK 컴파일러로,[18] 이전에 Thompson Automation Software에 의해 판매된 바 있습니다(작업이 종료되었습니다).
- Jawk는 Java에서 AWK를 구현하는 프로젝트로 SourceForge에서 [19]호스팅됩니다.AWK 스크립트 내의 Java 기능(Java 스레드, 소켓, 컬렉션 등)에 대한 액세스를 제공하기 위해 언어에 확장 기능이 추가되었습니다.
- xgawk는 동적으로 로드 가능한 라이브러리를 사용하여 gawk를 확장하는 gawk의[20] 포크입니다.XMLgawk 확장이 공식 GNU Awk 릴리스 4.1.0에 통합되었습니다.
- QSEAWK는 QSE 라이브러리에 포함된 임베디드 AWK 인터프리터 구현으로 C 및 C++[21]용 임베디드 Application Programming Interface(API; 응용 프로그램프로그래밍 인터페이스)를 제공합니다.
- libfawk는 C로 작성된 매우 작은 기능 전용 재진입 가능한 내장 인터프리터입니다.
- BusyBox에는 Dmitry Zakharov가 작성한 AWK 구현이 포함되어 있습니다.이는 임베디드 시스템에 적합한 매우 작은 구현입니다.
- 마이클 파커의 CLOWK는 [22]동일한 작성자의 정규 표현 라이브러리를 기반으로 Common Lisp에서 AWK 구현을 제공합니다.
책들
- Aho, Alfred V.; Kernighan, Brian W.; Weinberger, Peter J. (1988-01-01). The AWK Programming Language. New York, NY: Addison-Wesley. ISBN 0-201-07981-X. Retrieved 2017-01-22.
- Robbins, Arnold (2001-05-15). Effective awk Programming (3rd ed.). Sebastopol, CA: O'Reilly Media. ISBN 0-596-00070-7. Retrieved 2009-04-16.
- Dougherty, Dale; Robbins, Arnold (1997-03-01). sed & awk (2nd ed.). Sebastopol, CA: O'Reilly Media. ISBN 1-56592-225-5. Retrieved 2009-04-16.
- Robbins, Arnold (2000). Effective Awk Programming: A User's Guide for Gnu Awk (1.0.3 ed.). Bloomington, IN: iUniverse. ISBN 0-595-10034-1. Archived from the original on 12 April 2009. Retrieved 2009-04-16.
「 」를 참조해 주세요.
레퍼런스
- ^ Stutz, Michael (September 19, 2006). "Get started with GAWK: AWK language fundamentals" (PDF). developerWorks. IBM. Archived (PDF) from the original on 2015-04-27. Retrieved 2015-01-29.
[AWK is] often called a data-driven language -- the program statements describe the input data to match and process rather than a sequence of program steps
- ^ Andreas J. Pilavakis (1989). UNIX Workshop. Macmillan International Higher Education. p. 196.
- ^ Arnold Robbins (2015). Effective Awk Programming: Universal Text Processing and Pattern Matching (4th ed.). O'Reilly Media. p. 560.
- ^ a b James W. Livingston (May 2, 1988). "The Great awk Program is No Birdbrain". Digital Review. p. 91.
- ^ Raymond, Eric S. "Applying Minilanguages". The Art of Unix Programming. Case Study: awk. Archived from the original on July 30, 2008. Retrieved May 11, 2010.
The awk action language is Turing-complete, and can read and write files.
- ^ Aho, Alfred V.; Kernighan, Brian W.; Weinberger, Peter J. (September 1, 1978). Awk — A Pattern Scanning and Processing Language (Second Edition) (Technical report). Unix Seventh Edition Manual, Volume 2. Bell Telephone Laboratories, Inc. Archived from the original on August 15, 2021. Retrieved February 1, 2020.
- ^ a b Aho, Alfred V.; Kernighan, Brian W.; Weinberger, Peter J. (1988). The AWK Programming Language. Addison-Wesley Publishing Company. ISBN 9780201079814. Retrieved 16 May 2015.
- ^ "UNIX Special: Profs Kernighan & Brailsford". Computerphile. September 30, 2015. Archived from the original on 2021-11-22.
- ^ "The Single UNIX Specification, Version 3, Utilities Interface Table". Archived from the original on 2018-01-05. Retrieved 2005-12-18.
- ^ "Chapter 15. Commands and Utilities". Linux Standard Base Core Specification 4.0 (Technical report). Linux Foundation. 2008. Archived from the original on 2019-10-16. Retrieved 2020-02-01.
- ^ a b c Robbins, Arnold (March 2014). "The GNU Project and Me: 27 Years with GNU AWK" (PDF). skeeve.com. Archived (PDF) from the original on October 6, 2014. Retrieved October 4, 2014.
- ^ Dougherty, Dale; Robbins, Arnold (1997). sed & awk (2nd ed.). Sebastopol, CA: O'Reilly. p. 221. ISBN 1-565-92225-5.
- ^ Hamilton, Naomi (May 30, 2008). "The A-Z of Programming Languages: AWK". Computerworld. Archived from the original on 2020-02-01. Retrieved 2008-12-12.
- ^ a b "Records (The GNU Awk User's Guide)". Archived from the original on 2020-06-14. Retrieved 2020-05-23.
- ^ Kernighan, Brian W. (April 24–25, 1991). An AWK to C++ Translator (PDF). Usenix C++ Conference. Washington, DC. pp. 217–228. Archived (PDF) from the original on 2020-06-22. Retrieved 2020-02-01.
- ^ "FreeBSD's work log for importing BWK awk into FreeBSD's core". May 16, 2005. Archived from the original on September 8, 2013. Retrieved September 20, 2006.
- ^ http://gawkextlib.sourceforge.net/csv/gawk-csv.html의 gawk-csv 설명서 웨이백 머신에서 2020-03-25 아카이브
- ^ James K. Lawless (May 1, 1997). "Examining the TAWK Compiler". Dr. Dobb's Journal. Archived from the original on February 21, 2020. Retrieved February 21, 2020.
- ^ "Jawk at SourceForge". Archived from the original on 2007-05-27. Retrieved 2006-08-23.
- ^ "xgawk Home Page". Archived from the original on 2013-04-18. Retrieved 2013-05-07.
- ^ "QSEAWK at GitHub". GitHub. Archived from the original on 2018-06-11. Retrieved 2017-09-06.
- ^ "CLAWK at GitHub". GitHub. Archived from the original on 2021-08-25. Retrieved 2021-06-01.
추가 정보
- Andy Oram (May 19, 2021). "Awk: The Power and Promise of a 40-Year-Old Language". Fosslife. Retrieved June 9, 2021.
- Hamilton, Naomi (May 30, 2008). "The A-Z of Programming Languages: AWK". Computerworld. Retrieved 2008-12-12. – Alfred V와의 인터뷰AWK의 아호
- Robbins, Daniel (2000-12-01). "Awk by example, Part 1: An intro to the great language with the strange name". Common threads. IBM DeveloperWorks. Retrieved 2009-04-16.
- Robbins, Daniel (2001-01-01). "Awk by example, Part 2: Records, loops, and arrays". Common threads. IBM DeveloperWorks. Retrieved 2009-04-16.
- Robbins, Daniel (2001-04-01). "Awk by example, Part 3: String functions and ... checkbooks?". Common threads. IBM DeveloperWorks. Archived from the original on 19 May 2009. Retrieved 2009-04-16.
- AWK – 60분 만에 전문가가 되다
- The Single UNIX Specification, The Open Group 버전 4 : 패턴 스캔 및 처리 언어– Shell and Utilities Reference,
- Linux 사용자 매뉴얼– 사용자 명령어 –