AWK
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
AWK는 1977년 개발된 텍스트 처리 및 프로그래밍 언어이다. 유닉스 환경에서 텍스트를 처리하기 위해 설계되었으며, 간결한 스크립트 작성을 지원하는 강력한 정규 표현식 처리 기능을 제공한다. AWK는 텍스트 파일의 내용 분석, 데이터 추출, 보고서 생성 등 다양한 작업을 수행하는 데 사용되며, GNU 프로젝트에서 개발한 gawk를 비롯한 여러 구현체가 존재한다. AWK는 패턴과 액션의 조합으로 프로그램을 구성하며, C 언어와 유사한 문법과 제어 구조를 갖는다. 또한, 내장 변수와 함수를 제공하여 텍스트 처리를 용이하게 하며, 텍스트 파일에서 단어 빈도 계산, 특정 패턴 검색 등 다양한 활용 예시를 보여준다.
더 읽어볼만한 페이지
- 1977년 소프트웨어 - BSD
BSD는 캘리포니아 대학교 버클리에서 시작된 유닉스 계열 운영 체제로, 오픈 소스 라이선스인 BSD 라이선스를 통해 자유롭게 사용 및 배포되며, FreeBSD, OpenBSD, NetBSD 등 다양한 운영 체제로 파생되었다. - 1977년 소프트웨어 - OpenVMS
OpenVMS는 DEC에서 개발한 멀티유저, 멀티프로세싱 가상 메모리 기반 운영 체제로, 고도의 안정성, 보안성, 확장성을 특징으로 하며 다양한 아키텍처, 클러스터링, 네트워킹, 프로그래밍 언어 및 개발 도구를 지원한다. - 패턴 매칭 프로그래밍 언어 - 하스켈
하스켈은 해스켈 커리의 이름을 딴 순수 함수형 프로그래밍 언어로, 여러 함수형 언어 통합 노력의 결과로 탄생하여 느긋한 계산법, 패턴 매칭, 타입 클래스, 모나드 등의 특징을 가지며 GHC가 표준 구현체로 사용된다. - 패턴 매칭 프로그래밍 언어 - 스칼라 (프로그래밍 언어)
스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다. - 텍스트 지향 프로그래밍 언어 - Tcl
Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다. - 텍스트 지향 프로그래밍 언어 - PHP
PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
| AWK - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 개요 | |
| 이름 | AWK |
| 종류 | 스크립트 언어, 절차적 프로그래밍, 데이터 드리븐 프로그래밍 |
| 발표 연도 | 1977년 |
| 최신 릴리스 버전 | IEEE Std 1003.1-2008 (POSIX) / 1985 |
| 설계자 | 알프레드 에이호, 피터 와인버거, 브라이언 커니핸 |
| 타이핑 | 없음; 문자열, 정수 및 부동 소수점 숫자 처리 가능; 정규 표현식 |
| 구현체 | awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (컴파일러), Awka (컴파일러) |
| 방언 | 'old awk' oawk 1977, 'new awk' nawk 1985, 'GNU Awk' gawk |
| 영향을 받은 언어 | C, sed, SNOBOL |
| 영향을 준 언어 | Tcl, AMPL, Perl, Korn Shell (ksh93, dtksh, tksh), Lua |
| 운영 체제 | 크로스 플랫폼 |
| 웹사이트 | # 정보 없음. 해당 필드는 제공된 문서에 웹사이트 정보가 없어 생략함. |
2. 역사
AWK는 1977년 벨 연구소의 알프레드 에이호, 피터 와인버거, 브라이언 커니핸이 개발했다.[28] 이들 이름의 머리글자를 따서 'AWK'라는 이름이 붙여졌으며, '오크'라고 읽는다. AWK는 sed, grep과 같은 텍스트 처리 도구에 연산 기능을 추가하여 유닉스 환경에서 텍스트 처리를 확장한 도구였다.
AWK는 Version 7 Unix에 처음 등장했으며, 본 셸 외에 유닉스 파이프라인에 계산 기능을 추가한 유일한 스크립트 언어였다. AWK는 Single UNIX Specification의 필수 유틸리티이며, Linux Standard Base 사양에서도 요구된다.[8][9]
1985년에는 사용자 정의 함수 등의 기능을 추가한 'new awk' (nawk)가 등장했다. 브라이언 커니핸의 nawk 소스는 1993년에 비공개로 처음 출시되었고, 1990년대 후반부터 공개되었다.[12]
GNU 프로젝트는 AWK의 자유 소프트웨어 구현인 gawk (GNU AWK)를 개발했다.[12] gawk는 POSIX 표준을 준수하며, 멀티바이트 문자 및 네트워크 연결 기능 등 다양한 확장을 제공한다. GNU AWK는 GNU 기반 리눅스 패키지에 포함되어 널리 배포된 버전 중 하나이다.[11]
AWK는 1987년에 나온 Perl 언어에 중요한 영감을 주었다. 1990년대에 Perl은 Unix 텍스트 처리 언어라는 틈새 시장에서 AWK와 경쟁하며 큰 인기를 얻었다.
2. 1. 주요 AWK 구현체
| 구현체 | 설명 |
|---|---|
| BWK awk (nawk) | 브라이언 커니핸이 작성한 버전으로, FreeBSD에서는 one-true-awk라고 부른다.[17] 안드로이드, FreeBSD, NetBSD, OpenBSD, macOS, illumos 등에서 사용된다. |
| gawk (GNU awk) | GNU 프로젝트에서 만든 자유 소프트웨어 구현으로, 국제화 및 지역화와 TCP/IP 네트워킹을 구현하는 데 큰 발전을 이루었다. 자체 디버거를 포함하고 프로파일러를 통해 스크립트 성능을 측정하고 향상시킬 수 있다. 일부 리눅스 배포판은 gawk를 기본 AWK 구현으로 포함하고 있다. |
| gawk-csv | gawk의 CSV 확장 기능으로, CSV 형식 데이터를 입력하고 출력하는 기능을 제공한다.[18] |
| mawk | Mike Brennan이 작성한 바이트코드 인터프리터를 기반으로 하는 매우 빠른 AWK 구현이다. |
| libmawk | mawk의 포크로, 애플리케이션이 여러 개의 병렬 awk 인터프리터 인스턴스를 포함할 수 있도록 한다. |
| awka | AWK 스크립트를 C 코드로 변환하는 도구이다. 컴파일 시 libawka.a를 정적으로 포함하면 결과 실행 파일의 속도가 빨라진다. |
| tawk (Thompson AWK) | Solaris, DOS, OS/2, Windows용 AWK 컴파일러이다. |
| Jawk | Java로 AWK를 구현하는 프로젝트이다. |
| xgawk | gawk의 포크로,[21] 동적으로 로드 가능한 라이브러리로 gawk를 확장한다. |
| QSEAWK | QSE 라이브러리에 포함된 임베디드 AWK 인터프리터 구현이다. |
| libfawk | C로 작성된 매우 작고, 기능만 있으며, 재진입 가능하고, 임베디드 가능한 인터프리터이다. |
| BusyBox | Dmitry Zakharov가 작성한 AWK 구현이 포함되어 있다. 임베디드 시스템에 적합한 매우 작은 구현이다. |
| CLAWK | Common Lisp로 AWK를 구현한다.[23] |
| goawk | Go로 구현된 AWK이다. |
AWK 프로그램은 '패턴 { 동작 }' 형태의 명령들이 여러 줄 이어진 구조로 되어 있다. 여기서 '패턴'은 주로 정규 표현식을 사용하여, 입력 레코드(일반적으로 한 줄)가 특정 조건을 만족하는지 검사한다. '동작'은 패턴과 일치하는 레코드에 대해 실행되는 명령어 집합이다.[13] 예를 들어, `/사과/ { print }`와 같은 프로그램은 입력에서 "사과"라는 문자열을 포함하는 모든 줄을 출력한다.
3. AWK 프로그램의 구조
`BEGIN`과 `END`는 특수한 패턴이다. `BEGIN`은 입력을 처리하기 전에, `END`는 모든 입력을 처리한 후에 실행되는 동작을 정의한다. 프로그램 시작과 끝에서 특정 작업을 수행하는 데 사용된다.[13]
AWK 프로그램은 `조건 { 동작 }` 형태로 구성될 수 있다. 조건이 참인 경우에만 동작이 실행되며, 조건이나 동작 중 하나는 생략 가능하다. 조건이 생략되면 모든 레코드에 대해 동작이 실행되고, 동작이 생략되면 기본 동작인 레코드 출력이 수행된다. AWK는 정규 표현식과 일치하는 연산자 `~`를 포함하며, `/regexp/`는 현재 레코드와 일치하는 정규 표현식을 나타내는 편리한 구문이다.
AWK 스크립트는 패턴과 액션의 조합을 나열한 형태이다. 실행 시 먼저 `BEGIN` 패턴의 액션을 실행하고, 입력을 레코드 구분자(기본값은 개행 문자)와 필드 구분자(기본값은 연속된 스페이스 또는 수평 탭)를 기준으로 레코드와 필드로 분할한다. 각 레코드가 패턴에 일치하는지 검사하여 일치하면 해당 액션을 실행한다. 일치하는 패턴이 여러 개면 해당 액션들이 순서대로 실행된다. 입력이 소진될 때까지 반복 후 `END` 패턴의 액션을 실행하고 종료한다.
AWK의 제1급 객체 자료형은 숫자(배정밀도 부동 소수점)와 문자열이다. 연관 배열도 지원하지만, 제1급 객체는 아니다.
다음은 빈 줄 수와 "사과", "사과" 또는 "애플" 문자열을 포함하는 행 수를 출력하는 예제이다.
```awk
BEGIN {
blank_line = 0
bol_apple = 0
}
/^$/ {
++blank_line
}
/(사과|사과|애플)/ {
++bol_apple
}
END {
print "빈 줄은" blank_line "행입니다."
print "「사과」·「사과」또는「애플」이라는 문자열을 포함하는 것은" bol_apple "행입니다."
}
```
`BEGIN` 블록은 필수가 아니지만, 변수를 명시적으로 초기화하는 것이 좋다.
패턴에는 시작과 종료를 정의하는 패턴도 가능하다. 예를 들어, `/" 포함 행까지 출력한다.
3. 1. 명령어
AWK 명령어는 함수 호출, 변수 할당, 산술 계산, 그리고 이들의 조합으로 이루어질 수 있다. AWK는 다양한 내장 함수를 제공하며, AWK의 변형에 따라 더 많은 함수를 포함하기도 한다. 일부 변형은 동적 링크 라이브러리를 통해 더 많은 함수를 제공한다.
`print` 명령어는 텍스트를 출력한다. `print`만 사용하면 현재 레코드(줄)의 내용을 출력하고, `$1`, `$3`과 같이 사용하면 해당 레코드의 첫 번째, 세 번째 필드를 출력한다. 필드 사이는 출력 필드 구분자(OFS)로 구분되며 기본값은 공백 문자이다. `$X` (X는 숫자)는 X번째 필드를, `$0`은 전체 레코드를 의미하며, `print`와 `print $0`은 동일하다.
`print`는 계산 결과나 함수 호출 결과를 출력할 수 있다.
```awk
print 3+2
print foobar(3)
print foobar(variable)
print sin(3-2)
```
다음과 같이 출력을 파일로 보낼 수도 있다.
```awk
print "expression" > "file name"
```
변수 이름은 알파벳 대소문자와 숫자[37]의 조합으로 만들 수 있지만, AWK 예약어는 사용할 수 없다. `+`, `-`, `*`, `/`는 사칙연산을 나타낸다. 문자열을 합치려면 변수나 문자열 상수(겹따옴표로 묶음)를 붙여 쓴다. 주석은 `#`으로 시작한다.
C와 유사하게, 함수는 다음과 같이 정의한다.
```awk
function add_three (number ,temp) {
temp = number + 3
return temp
}
```
함수 호출은 `print add_three(36)`과 같이 하며, 결과는 39이다. 함수는 지역 변수를 가질 수 있으며, 인수 목록 끝에 추가한다. 함수 호출 시에는 값을 생략하며, 인수와 지역 변수를 구분하기 위해 빈칸을 추가하는 것이 일반적이다.
3. 2. 내장 변수
AWK는 프로그램 내에서 사용할 수 있는 다양한 내장 변수를 제공한다.[14] 이러한 변수들은 레코드와 필드 정보를 담고 있으며, 사용자가 처리 과정을 제어하는 데 도움을 준다.
`$0`은 전체 레코드를, `$1`, `$2`, `$3` 등은 레코드 내 개별 텍스트 필드의 텍스트 또는 값을 저장하는 필드 변수이다.
3. 3. 제어 구조
AWK는 다음과 같은 제어 구조를 가지고 있다.- if문
:* if (식) 식이 참일 때 실행되는 문awk
:* if (식) 식이 참일 때 실행되는 문 else 식이 거짓일 때 실행되는 문awk
- for/while문
:* for (초기화식; 조건식; 갱신식) 실행되는 문awk
:* for (변수 in 배열) 실행되는 문awk
:* while (식) 실행되는 문awk
:* do 실행되는 문 while (식)awk
:* breakawk
:* continueawk
- 기타
:; nextawk
:: 이후 문장의 실행 및 이후 패턴 처리를 하지 않고 다음 레코드의 처리를 시작한다.
:; nextfileawk
:: 현재 입력 파일의 나머지를 읽지 않고 다음 파일의 처리를 시작한다.
:; returnawk
:: 함수의 처리를 중지하고 함수의 호출 측으로 제어를 반환한다. 값이 지정되어 있으면 값을 반환한다.
:; exitawk[3]
:: 프로그램의 실행을 종료시킨다.
4. 문법
AWK에서 변수 이름은 알파벳 대소문자와 숫자[37]의 조합으로 만들 수 있지만, AWK의 예약어는 변수 이름으로 사용할 수 없다. `+`, `-`, `*`, `/`는 각각 덧셈, 뺄셈, 곱셈, 나눗셈을 나타낸다. 문자열 결합은 두 변수나 문자열 상수를 나란히 배치하여 수행한다. 문자열 상수는 겹따옴표로 구분하며, 문장은 세미콜론으로 끝낼 필요가 없다. 주석은 `#` 기호로 시작한다.[37]
AWK 스크립트는 패턴과 액션의 조합을 나열한 형태이다. 실행 시작 시 `BEGIN` 패턴의 액션을 실행하고, 이후 입력을 읽어 레코드 구분자(기본값은 개행 문자)를 기준으로 레코드를 분할하고, 필드 구분자(기본값은 연속된 스페이스 또는 수평 탭)를 기준으로 필드를 분할한다. 레코드가 패턴과 일치하면 해당 액션을 실행하며, 일치하는 패턴이 여러 개이면 해당 액션들을 순서대로 모두 실행한다. 입력이 소진될 때까지 이 과정을 반복하고, 입력이 소진되면 `END` 패턴의 액션을 실행하고 종료한다.
AWK의 자료형에는 숫자(배정밀도 부동 소수점형으로 처리)와 문자열이 있다. 연관 배열(해시 테이블)도 지원하는데, 문자열을 키로 사용하며, 연관 배열의 내용은 연관 배열로 할 수 없다. 다차원 배열처럼 보이는 접근도 가능하지만, 실제로는 각 차원을 문자열로 변환하고 `SUBSEP` 변수의 문자열(기본값은 )을 구분자로 연결하여 키로 접근한다.
기본 스크립트 구성은 다음과 같다:
```awk
BEGIN {
시작 시 처리
}
패턴1 {
액션1
}
패턴2 {
액션2
}
# 주석
END {
종료 시 처리
}
```
`BEGIN`과 `END` 액션은 필수 사항이 아니다.
AWK는 변수 타입을 명시적으로 선언하지 않는다. 변수는 프로그램에서 사용될 때 암묵적으로 초기화되며, 아직 할당되지 않은 변수는 `0` 또는 `""`으로 초기화된 것으로 간주한다.
AWK는 문맥에 따라 값을 자동으로 변환한다. 산술 연산과 같이 숫자가 필요한 문맥에서는 값을 숫자로 변환하고, 문자열이 필요한 문맥에서는 문자열로 변환한다. 예를 들어:
```awk
a = "01"
b = 2
d = a + b
e = a + b + c
```
위 예에서 `d`와 `e`의 값은 모두 `3`이 된다. 이러한 암묵적 변환은 편리하지만, 사용자의 의도와 다른 결과를 초래할 수 있다. 변수를 반드시 숫자 또는 문자열로 사용해야 하는 경우, `x + 0`과 같이 0을 더하거나 `x ""`와 같이 빈 문자열을 결합하는 방법을 사용하기도 한다.
5. 활용 예제
awk
BEGIN { print "Hello, world!" }
```
AWK로 작성된 "Hello, World!" 프로그램이다. BEGIN 규칙은 프로그램이 시작될 때 한 번 실행되며, "Hello, world!"를 출력한다.
```awk
length > 80
```
80자 이상인 줄만 출력한다. `length`는 현재 줄의 길이를 나타내며, 별도의 동작이 지정되지 않으면 기본 동작인 `print`가 실행되어 해당 줄을 출력한다.
```awk
{ w += NF; c += length}
END { print NR, w, c }
```
파일의 줄 수(NR), 단어 수(w), 문자 수(c)를 계산하여 출력한다. `NF`는 현재 줄의 필드(단어) 개수를 나타내며, `length`는 현재 줄의 길이를 나타낸다. 각 줄마다 단어 수(w)와 문자 수(c)를 누적하고, END 블록에서 총 줄 수, 단어 수, 문자 수를 출력한다.
```awk
{ s += $1 }
END { print s }
```
각 줄의 첫 번째 필드의 값을 모두 더하여 총합(s)을 출력한다.
```awk
NR % 4 == 1, NR % 4 == 3 { printf "%6d %s\n", NR, $0 }
```
입력 파일에서 1, 2, 3번째 줄을 출력하고 4번째 줄은 건너뛴 후, 5, 6, 7번째 줄을 출력하고 8번째 줄은 건너뛰는 방식으로, 4의 배수 번째 줄을 제외하고 나머지 줄들을 줄 번호와 함께 출력한다. `NR`은 현재 줄 번호를 나타내며, `%`는 나머지 연산자이다. `printf` 함수는 C 언어의 `printf`와 유사하게 작동하며, 출력 형식을 지정할 수 있다.
```awk
/^--cut here--$/, 0
```
"--cut here--"라는 문자열로 시작하는 줄부터 파일 끝까지 모든 줄을 출력한다.
```awk
BEGIN {
FS="[^a-zA-Z]+"
}
{
for (i=1; i<=NF; i++)
words[tolower($i)]++
}
END {
for (i in words)
print i, words[i]
}
```
단어 빈도를 계산하여 각 단어와 그 빈도를 출력한다. `FS`는 필드 구분자를 설정하며, 여기서는 영문자가 아닌 문자들의 연속을 필드 구분자로 지정한다. 각 줄의 모든 필드(단어)를 소문자로 변환(`tolower`)하여 `words` 배열에 빈도를 저장하고, END 블록에서 각 단어와 빈도를 출력한다.
```bash
#!/bin/sh
pattern="$1"
shift
awk '/'"$pattern"'/ { print FILENAME ":" $0 }' "$@"
```
셸 스크립트를 사용하여 특정 패턴을 포함하는 줄을 찾고, 파일 이름과 함께 해당 줄을 출력한다. 첫 번째 인자로 패턴을 받고, `awk`를 실행하여 패턴과 일치하는 줄을 찾는다.
```bash
#!/bin/sh
export pattern="$1"
shift
awk '$0 ~ ENVIRON["pattern"] { print FILENAME ":" $0 }' "$@"
```
`ENVIRON` 배열을 사용하여 셸 스크립트에서 AWK로 환경 변수를 전달하고, 특정 패턴을 포함하는 줄을 파일 이름과 함께 출력한다.
```bash
#!/bin/sh
pattern="$1"
shift
awk '$0 ~ pattern { print FILENAME ":" $0 }' "pattern=$pattern" "$@"
```
명령줄 변수 할당을 사용하여 셸 스크립트에서 AWK로 패턴을 전달하고, 특정 패턴을 포함하는 줄을 파일 이름과 함께 출력한다.
```awk
BEGIN {
pattern = ARGV[1]
for (i = 1; i < ARGC; i++) # remove first argument
ARGV[i] = ARGV[i + 1]
ARGC--
if (ARGC == 1) { # the pattern was the only thing, so force read from standard input (used by book)
ARGC = 2
ARGV[1] = "-"
}
}
$0 ~ pattern { print FILENAME ":" $0 }
```
순수 AWK로 작성된 스크립트로, 첫 번째 인자를 패턴으로 받아 특정 패턴을 포함하는 줄을 파일 이름과 함께 출력한다. `ARGV` 배열을 조작하여 첫 번째 인자를 제거하고, 표준 입력에서 읽도록 설정한다.
6. 한국어 처리
AWK는 기본적으로 멀티바이트 문자를 지원하므로, 한국어 텍스트 처리에 활용할 수 있다. `gawk` 등 일부 구현체는 한국어 문자열 처리를 위한 확장 기능을 제공하기도 한다. 한국어 텍스트 처리 시, 필드 구분자(`FS`) 및 레코드 구분자(`RS`) 설정을 적절히 조정하여 원하는 결과를 얻을 수 있다.
하위 섹션에서 구체적인 한국어 처리 예제를 통해 자세한 내용을 확인할 수 있다.
6. 1. 한국어 처리 예제
awk{
for (i = 1; i <= NF; i++)
words[$i]++
}
END {
for (i in words)
print i, words[i]
}
```
위 소스를 `word_frequency.awk`로 저장하고 애국가 가사를 입력으로 주어 실행한 결과는 다음과 같다.
```bash
$ awk -f word_frequency.awk aegukga.txt
백두산이 1
충성을 1
소나무 1
대한으로 4
마르고 1
괴로우나 1
우리가슴 1
높고 1
가을하늘 1
저 1
남산위에 1
길이 4
하느님이 1
두른 1
즐거우나 1
기상과 1
밝은 1
불변함은 1
보우하사 1
맘으로 1
대한사람 4
달은 1
우리나라 1
공활한데 1
바람 1
나라 1
이 2
우리 1
서리 1
동해물과 1
무궁화 4
철갑을 1
삼천리 4
```
연관 배열을 사용하여 단어 빈도를 계산할 수 있다.
```awk
BEGIN {
FS="[^a-zA-Z]+"
}
{
for (i=1; i<=NF; i++)
words[tolower($i)]++
}
END {
for (i in words)
print i, words[i]
}
```
`BEGIN` 블록은 필드 구분자를 영문자가 아닌 문자의 시퀀스로 설정한다. 구분자는 정규 표현식일 수 있다. 그 후, 모든 입력 라인에 대해 작업을 수행하는 단순한 액션이 있다. 이 경우, 라인의 모든 필드에 대해, 소문자로 변환된 해당 단어가 나타나는 횟수에 1을 더한다. 마지막으로, `END` 블록에서 단어와 빈도를 출력한다.
```
for (i in words)
```
이 라인은 배열 `words`를 반복하여 배열의 각 첨자에 `i`를 설정하는 루프를 생성한다. 이는 대부분의 언어와 다르며, 이러한 루프는 배열의 각 값을 거친다. 따라서 루프는 각 단어를 해당 빈도 수와 함께 출력한다. `tolower`는 AWK에 추가된 기능으로, 책 출판 후에 추가되었다.
참조
[1]
웹사이트
Get started with GAWK: AWK language fundamentals
https://www6.softwar[...]
IBM
2006-09-19
[2]
서적
UNIX Workshop
Macmillan International Higher Education
[3]
서적
Effective Awk Programming: Universal Text Processing and Pattern Matching
O'Reilly Media
[4]
잡지
The Great awk Program is No Birdbrain
1988-05-02
[5]
웹사이트
Applying Minilanguages
http://www.faqs.org/[...]
[6]
기술보고서
Awk — A Pattern Scanning and Processing Language (Second Edition)
https://citeseerx.is[...]
Bell Telephone Laboratories, Inc.
1978-09-01
[7]
Youtube
UNIX Special: Profs Kernighan & Brailsford
https://www.youtube.[...]
2015-09-30
[8]
웹사이트
The Single UNIX Specification, Version 3, Utilities Interface Table
http://www.unix.org/[...]
[9]
기술보고서
Linux Standard Base Core Specification 4.0
https://refspecs.lin[...]
2008
[10]
서적
The Insider's Guide To The Universe
https://www.1000bit.[...]
Charles River Data Systems, Inc.
[11]
서적
sed & awk
O'Reilly
1997
[12]
웹사이트
The GNU Project and Me: 27 Years with GNU AWK
http://www.skeeve.co[...]
2014-03
[13]
웹사이트
The A-Z of Programming Languages: AWK
https://www.computer[...]
2008-05-30
[14]
웹사이트
Records (The GNU Awk User's Guide)
https://www.gnu.org/[...]
[15]
컨퍼런스
An AWK to C++ Translator
https://www.cs.princ[...]
1991-04-24
[16]
서적
The AWK Programming Language
https://archive.org/[...]
Addison-Wesley Publishing Company
[17]
웹사이트
FreeBSD's work log for importing BWK awk into FreeBSD's core
http://www.freebsd.o[...]
2005-05-16
[18]
웹사이트
CSV Processing With gawk (using the gawk-csv extension)
https://gawkextlib.s[...]
[19]
뉴스
Examining the TAWK Compiler
https://www.drdobbs.[...]
1997-05-01
[20]
웹사이트
'Jawk' at SourceForge
http://sourceforge.n[...]
[21]
웹사이트
'xgawk' Home Page
http://gawkextlib.so[...]
[22]
웹사이트
QSEAWK at GitHub
https://github.com/h[...]
[23]
웹사이트
CLAWK at GitHub
https://github.com/s[...]
[24]
서적
GAWK: Effective AWK Programming: A User's Guide for GNU Awk
[25]
웹사이트
AWK(オーク)でプログラミング
https://books.google[...]
Googleブックス
[26]
웹사이트
awk 【Aho Kerninghan Weinberger】
https://e-words.jp/w[...]
IT用語辞典
[27]
웹사이트
【 awk 】コマンド(基本編)――テキストの加工とパターン処理を行う
https://atmarkit.itm[...]
ITmedia
[28]
문서
프로그래밍 언어 AWK (일본어판 서문)
[29]
Github
awk source repository
https://github.com/o[...]
[30]
웹사이트
awk
http://pubs.opengrou[...]
IEEE 및 The Open Group
2013
[31]
웹사이트
Relevant Commands
http://refspecs.linu[...]
Linux Foundation
2015
[32]
웹인용
Get started with GAWK: AWK language fundamentals
https://www6.softwar[...]
IBM
2006-09-19
[33]
서적
UNIX Workshop
Macmillan International Higher Education
[34]
서적
Effective Awk Programming: Universal Text Processing and Pattern Matching
O'Reilly Media
[35]
문서
래리 월과 AWK, 펄의 개발 배경
[36]
문서
필드 정의
[37]
문서
허용 문자
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com