awk는 텍스트를 입력으로 받아 이를 가공하여 출력하는 programming language이다.
그 활용 범위가 상당히 넓어 상당히 많이 쓰이는 language이다.
<awk program의 구조>
BEGIN {
그 활용 범위가 상당히 넓어 상당히 많이 쓰이는 language이다.
<awk program의 구조>
BEGIN {
actions A
}
[condition B] {
[condition B] {
actions B
}
[condition C] {
[condition C] {
actions C
}
.
.
.
END {
.
.
.
END {
actions D
}
전체 프로그램의 구조는 위와 같다.
1. awk가 실행되면 텍스트 입력을 읽기 전에 actions A를 실행한다. (생략 가능)
2. 텍스트 입력을 한 record씩 받아와 그 record가 condition B를 만족하면 actions B를 수행한다. 그리고 또 그 record가 condition C를 만족하면 actions C를 실행한다.
3. 모든 텍스트의 record에 대해 2의 과정을 반복한다.
3. 마치기 전 actions D를 실행한다. (생략 가능)
여기서 중요한 것이 텍스트 입력을 한 record씩 받아와 actions B와 actions C등을 모두 실행한다는 것이다.
자세히 말해 awk는 텍스트 입력의 한 record를 받아와 actions B와 actions C등을 모두 수행하고, 그 다음 record를 다시 받아와 actions B와 actions C를 모두 수행하는 과정을 텍스트 입력의 마지막까지 계속해서 반복 수행하는 것이다.
그리고 앞부분의 BEGIN {}, 뒷부분의 END {}은 생략이 가능하다.
여기에서 record란, 텍스트를 나누게 하는 하나의 단위이다.
이처럼 텍스트를 나누는 단위는 awk에서 크게 두 가지로 나누어진다.
이들은 record와 field이다.
하나의 텍스트는 여러 개의 record로 이루어져 있으며,
하나의 record는 여러 개의 field를 포함하고 있다.
awk에서 record를 나누는 default 단위는 \n(newline)이다.
그리고 field를 나누는 default 단위는 ' '(space)이다.
이들 record와 field를 나누는 단위는 바꿀 수 있으며, 이는 이후에 살펴보도록 한다.
예를 들어 다음 텍스트를 보자.
john 85 92 78 94 88
andrea 89 90 75 90 86
jasper 84 88 80 92 84
즉 위의 예제에서 record는 총 3개
Record 1: john 85 92 78 94 88
Record 2: andrea 89 90 75 90 86
Record 3: jasper 84 88 80 92 84
이다.
그리고 record 1에서 field는 총 6개
Field 1: john
Field 2: 85
Field 3: 92
Field 4: 78
Field 5: 94
Field 6: 88
이다.
awk 프로그램 내부에서 현재 수행하고 있는 record에서 각각의 field를 나타낼 때 사용하는 syntax는 다음과 같다. (awk는 record를 하나씩 읽어와 수행하므로 record를 지칭하는 syntax는 없다.)
$n: Field n을 지칭.
$0: 현재 수행하고 있는 record.
예)
{
전체 프로그램의 구조는 위와 같다.
1. awk가 실행되면 텍스트 입력을 읽기 전에 actions A를 실행한다. (생략 가능)
2. 텍스트 입력을 한 record씩 받아와 그 record가 condition B를 만족하면 actions B를 수행한다. 그리고 또 그 record가 condition C를 만족하면 actions C를 실행한다.
3. 모든 텍스트의 record에 대해 2의 과정을 반복한다.
3. 마치기 전 actions D를 실행한다. (생략 가능)
여기서 중요한 것이 텍스트 입력을 한 record씩 받아와 actions B와 actions C등을 모두 실행한다는 것이다.
자세히 말해 awk는 텍스트 입력의 한 record를 받아와 actions B와 actions C등을 모두 수행하고, 그 다음 record를 다시 받아와 actions B와 actions C를 모두 수행하는 과정을 텍스트 입력의 마지막까지 계속해서 반복 수행하는 것이다.
그리고 앞부분의 BEGIN {}, 뒷부분의 END {}은 생략이 가능하다.
여기에서 record란, 텍스트를 나누게 하는 하나의 단위이다.
이처럼 텍스트를 나누는 단위는 awk에서 크게 두 가지로 나누어진다.
이들은 record와 field이다.
하나의 텍스트는 여러 개의 record로 이루어져 있으며,
하나의 record는 여러 개의 field를 포함하고 있다.
awk에서 record를 나누는 default 단위는 \n(newline)이다.
그리고 field를 나누는 default 단위는 ' '(space)이다.
이들 record와 field를 나누는 단위는 바꿀 수 있으며, 이는 이후에 살펴보도록 한다.
예를 들어 다음 텍스트를 보자.
john 85 92 78 94 88
andrea 89 90 75 90 86
jasper 84 88 80 92 84
즉 위의 예제에서 record는 총 3개
Record 1: john 85 92 78 94 88
Record 2: andrea 89 90 75 90 86
Record 3: jasper 84 88 80 92 84
이다.
그리고 record 1에서 field는 총 6개
Field 1: john
Field 2: 85
Field 3: 92
Field 4: 78
Field 5: 94
Field 6: 88
이다.
awk 프로그램 내부에서 현재 수행하고 있는 record에서 각각의 field를 나타낼 때 사용하는 syntax는 다음과 같다. (awk는 record를 하나씩 읽어와 수행하므로 record를 지칭하는 syntax는 없다.)
$n: Field n을 지칭.
$0: 현재 수행하고 있는 record.
예)
{
print $1, ": ", ($2 + $3 + $4 + $5 + $6)/5;
}
아래와 같은 awk program을 사용하여 위의 예를 입력으로 넣는다면
(awk program에서 괄호({) 앞의 condition은 생략이 가능하다. 생략되면 모든 record에 대해 해당 action을 수행한다.)
결과는 다음과 같다.
john 87.4
andrea 86
jasper 85.6
awk program은 첫번째 record, record 1을 가져와
첫번째 field를 출력하고, ': '를 출력한 다음, 두번째부터 여섯번째 필드까지의 수를 더한 다음 5로 나누어 평균을 구하고, 이를 출력한다.
이러한 과정을 텍스트 마지막, record 3까지 반복하여 수행하여 위와 같은 결과를 얻는다.
아래와 같은 awk program을 사용하여 위의 예를 입력으로 넣는다면
(awk program에서 괄호({) 앞의 condition은 생략이 가능하다. 생략되면 모든 record에 대해 해당 action을 수행한다.)
결과는 다음과 같다.
john 87.4
andrea 86
jasper 85.6
awk program은 첫번째 record, record 1을 가져와
첫번째 field를 출력하고, ': '를 출력한 다음, 두번째부터 여섯번째 필드까지의 수를 더한 다음 5로 나누어 평균을 구하고, 이를 출력한다.
이러한 과정을 텍스트 마지막, record 3까지 반복하여 수행하여 위와 같은 결과를 얻는다.
'Linux' 카테고리의 다른 글
[awk] awk 사용법#3 - Statements (0) | 2010.05.14 |
---|---|
[awk] awk 사용법#2 - awk program basic (0) | 2010.05.13 |
[CVS] CVS 사용법 (0) | 2010.05.11 |
[Linux] Linux Command Summary (0) | 2010.04.16 |
[Linux] Regular Expression (0) | 2010.04.16 |