GNU Awk 사용자 가이드/함수
함수란 입력받은 Input을 일정한 규칙에 따라 처리한 뒤 Output을 내놓는 것이다. 예를 들어 어떤 함수 x에 input을 넣었을 때 input값에 1만큼 증가한 값이 output으로 나온다면 이 함수는 +1을 해주는 함수라고 할 수 있다.
awk에서 함수는 보통 다음과 같은 기본형을 갖는다
function(input1, input2, ...) {
return
}
input의 개수는 함수마다 다르며, 사용자 정의 함수의 경우 사용자가 필요한 만큼 지정해 줄 수 있다.
awk에서는 함수가 크게 두 부류로 나누어진다. 하나는 awk에 이미 내장되어 있는 내장함수(Built-In Function)인데, 이 함수들은 사용자가 원하는 경우 언제든지 불러와서 사용할 수 있다. 다른 하나는 사용자 정의 함수로서, 사용자가 프로그램의 목적에 따라 임의로 규칙을 만들어낸 함수를 가르킨다. 사용자 함수의 이름과 형식은 자유롭게 정할 수 있으나 이미 내장된 함수들의 이름을 사용할 수는 없다.
이 문서의 전반부는 awk에 내장된 함수들의 종류를 설명하고, 후반부에서는 사용자 정의 함수의 작성방법을 간단히 설명한다.
내장 함수
[+/-]내장함수는 사용자가 만드는 awk프로그램에서 항상 사용할 수 있는 함수이다. awk의 내장 함수는 다섯 가지 정도로 분류된다.
Numeric Functions
[+/-]Numeric Function은 수치 정보를 처리하는 함수들을 뜻한다. 아래의 목록은 awk에 내장된 수치 함수의 이름과 설명을 담고 있다.
함수명 | 설명 |
---|---|
int(x) | x에서 가장 가까운 정수 값을 return한다 |
sqrt(x) | x의 양의 제곱근을 return |
exp(x) | x를 지수로, 자연상수 e를 밑으로 하는 지수함수 return |
log(x) | x의 자연로그값을 return |
sin(x) | x의 sin값을 return |
cos(x) | x의 cos값을 return |
atan(y,x) | x의 arctangent값을 return |
rand() | 0과 1사이의 범위에서 random number를 return |
srand([x]) | rand 기능과 관련하여 시작점이나 seed 설정 |
String-Manipulation Functions
[+/-]문자열 함수는 하나 또는 여러 문자열의 text를 보거나, 변화시키는 기능을 갖고 있다. 아래의 목록은 문자열 함수의 이름과 기능을 나열한 것이다.
함수명 | 설명 |
---|---|
asort#(source[,dest]) | array source에서 요소들을 정렬해서 return |
asorti(source[,dest]) | rray source에서 요소들을 index를 기준으로 정렬해서 return |
index(in,find) | 주어진 string이 포함된 문자열을 검색해서 return |
length(string) | 주어진 input의 철자 수를 세서 return |
match(string, regexp, [, array]) | string에서 regular expression의 위치를 return |
split(string,array,[,fieldsep]) | fieldsep에 따라 string을 쪼개고 각각을 저장 |
sprintf(format, expression1,...) | printf와 같은 용도이지만 값을 return하기만 할 뿐 출력하지 않는다 |
strtonum(str) | 문자열을 숫자로 변환, 문자열의 종류에 따라 8진수,16진로 파악하기도 함 |
sub(regexp, replacement[, target]) | regexp에 해당하는 문자열을 replace로 대치시킴 |
gsub(regexp, replacement[, target]) | 매치되는 모든 string을 replace로 대치시킴 |
gensub(regexp, replacement[, target]) | original string의 값이 변하지 않은 채로 매치되는 값들만 return |
substr(string, start[, length]) | start에서 시작해 length만큼의 길이까지 문자열을 return한다 |
tolower(string) | 해당 문자열의 대문자를 소문자로 바꿔서 출력 |
toupper(string) | 해당 문자열의 소문자를 대문자로 바꿔서 출력 |
Input/Output Function
[+/-]입출력 데이터와 관련된 함수들의 목록은 아래와 같다.
함수명 | 설명 |
---|---|
close(filename [,how]) | filename에 해당하는 파일을 닫는다 |
system(command) | operating-system의 명령어를 실행하고 이를 awk에 return |
getline() | 처리된 output을 다음 레코드의 input으로 받는다. |
printf() | 내용을 그대로 return하면서 안에서 변수를 순서대로 받아 입력한 string과 같이 출력 |
Time Functions
[+/-]awk에서 제공하는 시간정보 관련 함수이다.
함수명 | 설명 |
---|---|
systime() | 현재시간을 초단위까지 return |
mktime(datespec) | systime으로부터 받은 시간을 dataspec에 입력 |
strftime([format[,timestamp[,ufc-flag]]]) | ufc-flag에서 받은 시각(표준시각)을 문자로 표현, 기본 포맷인 경우 '%a,%A...'와 같은 문자열로 출력된다. |
Bit-Manipulation Functions
[+/-]비트값을 처리하는 Function으로써 불 대수값을 출력하는 함수와 자리를 이동하며 처리하는 함수로 구성된다. 목록은 다음과 같다.
함수명 | 설명 |
---|---|
and(v1,v2) | 입력된 값들의 AND연산 값 출력 1 1인 경우 1출력 |
or(v1,v2) | 입력된 값들의 or연산 값 출력 0 0인 경우를 제외하고 1출력 |
xor(v1,v2) | 입력된 값들의 xor연산 값 출력, 1 0 또는 0 1인 경우 1 출력 |
lshift(val) | 카운트된 bit만큼 왼쪽으로 이동한 값을 return |
rshift(val) | 카운트된 bit만큼 오른쪽으로 이동한 값을 return |
사용자 정의 함수
[+/-]사용자 정의 함수는 awk 프로그램의 내부 어디에서든 만들고 사용할 수 있다. 일단 프로그램 내에서 함수가 정의된 후에는 다시 정의하지 않고 바로 적용하여 편리하게 사용할 수 있다.
함수의 기본 정의방식
[+/-]awk에서 함수는 보통 다음과 같은 형식으로 만들어진다.
function name(parameter1, parameter2, ...) {
body-of-function
}
name은 함수의 이름을 가리키고, parameter는 함수에 들어가는 input을 의미한다. body of function은 본격적인 함수의 내용을 가리킨다.
함수의 예시
[+/-]m부터 n까지를 더한 결과값을 내는 함수를 sum(m, n)의 소스 코드는 아래와 같다
function sum(start, end) {
total = 0;
for (i = start; i<= end; i++) {
total = total + i;
}
return total;
}
위와 같이 프로그램 내에서 함수를 정의한 후 그 다음부터는 같은 연산이 필요할 때마다 함수로 간단하게 입력해서 사용할 수 있다.