AWK?

AWK?

AWK는 유닉스에서 처음 개발된 일반 스크립트 언어이다. AWK의 기본 기능은 텍스트 형태로 되어있는 입력 데이터를 행과 단어 별로 처리해 출력하는 것이다.

AWK는 문자열 데이터와 연관 배열(배열의 인덱스가 숫자가 아닌 임의의 값이 될 수 있는 배열), 정규 표현식을 주로 사용한다. AWK와 sed가 결합하면 간결하면서도 강력한 스크립팅이 가능하다. AWK는 유닉스 버전 7에 처음 등장해서 지금까지 사용되는 매우 오래된 도구로, 오늘날에는 거의 모든 유닉스 계열 운영체제에 포함되어 있는 표준 도구로 자리잡았으며 다른 운영체제에서도 사용할 수 있다.

AWK 프로그램은 기본적으로 패턴과 패턴을 처리하는 명령어 짝을 늘여놓은 구조로 이루어져 있다. 입력으로부터 한 줄씩을 읽어서 정규 표현식으로 조건이 맞는지를 검사하고 참으로 판명되면 그 줄에 대해 명령어를 실행하는 형식이다.



AWK를 이용한 응용분야

  • 데이터 프로세싱
  • 리포트 작성
  • 간단한 데이버베이스 구축



AWK 구조

1
2
3
4
awk pattern {action} 	  #동작
    pattern {action}
    ...
    filenames 			 #입력파일
1
awk -f pattern-action-file filenames


awk는 pattern들과 action 그리고 연산자로 이루어져있다.’ action은 문장으로 이루어져 있거나 상수 하나로도 이루어질 수 있다. 개행 문자나 세미콜론에 의해 분리된 몇 개의 문장이 연속으로 구성될 수 도 있다.

1
2
3
4
{
	for(i=1; i<=NF; i++)
		count++
}


미리 정의된 변수들
변 수 내 용
FILENAME 현재 처리되고 있는 파일의 이름
FS 입력 필드 분리문자
NR 현재 레코드(행)의 번호
NF 현재 레코드(행)의 필드의 개수
OFS 출력되는 필드의 분리문자



AWK 명령어


BEGIN
1
BEGIN {print 3+2}

입력을 읽어들이기 전에 옆에 제시되는 문장을 실행시킨다.


END
1
END {print 3+2}

입력을 모두 처리한 후, 옆에 제시되는 문장을 실행시킨다.


print
1
print $1, $3

첫 번째와 세 번째 필드를 출력한다. ($0은 전체를 의미), $1과 $3 사이에는 디폴트로 빈칸 하나로 주어지는 구분자가 들어간다.


1
2
3
print 3+2
print foo()
print sin(3-2)

위와 같은 출력으로도 사용할 수 있다.


1
2
print "expression1" > "file name"
print "expression2" >> "file name"

위와 같은 형식으로 파일에 덮어쓰거나 이어 쓸 수 있다.


사용자 정의 함수

C의 경우와 비슷하게 작성된다.

1
2
3
4
function add_three(number, temp) {
    temp = number + 3
    return temp
}

사용은 아래와 같이 사용.

1
print add_three(36)			#39가 출력됨.



예제


첫 번째 필드의 값을 계속 더하기
1
2
 { s+= $1 }
 END { print s }


입력 파일의 낱말 빈도 계산
1
2
3
4
5
6
7
8
9
 {
    for ( i=1; i<=NF; i++ )
    	words[$i]++
 }

 END {
    for (i in words)
    	print i, words[i]
 }



참고 www.dreamy.pe.kr