리눅스

gawk 반복문, 조건문

작성자
heukchoo
작성일
2021-05-15 11:54
조회
306
리눅스 쉘 프로그래밍에서도 설명 했듯이 프로그램은 변수, 반복문, 조건문 만 있으면 기본적인 모든 프로그래밍을 할 수 있다.
이번 글에서는 반복문과 조건문의 예시를 소개한다.
gawk는 C언어의 문법을 대체로 따르기 때문에 생소한 문법은 아니다.







반복문 for

$gawk 'BEGIN{ sum=0 ; for ( i = 0 ; i < 100 ; i++) { sum=sum+i } ; print sum }'
4950

데이터 입력없이 gawk를 실행하기 위해 BEGIN 구문만 사용하였다.
sum이라는 사용자 변수를 지정하고 0값으로 초기화 하였다.
for 문의 기본 문법에 의해 i의 사용자 변수를 지정하고 0값으로 초기화 하였고, i가 100 보다 작을 때 까지 i값을 1씩 증가시키면서 다음의 중괄호 처리를 반복한다.
for 문 다음의 중괄호는 sum 변수에 i를 더한다. i값을 1씩 증가시키면서 sum에 계속 더했다.
sum 값을 print 명령으로 출력했다.

gawk의 반복문은 C언어와 동일하게 for 문, while 문 등이 있지만 for 문만 사용해도 충분하다.
while 문 등은 필요한 경우 소개를 하겠다.






break, exit, continue

break 명령을 if 문과 함께 for 문에 삽입하면 특정 조건에서 for 문을 빠져나올 수 있다.
exit, continue 등의 명령도 사용할 수 있다.

break, exit, continue의 차이를 아래에 설명한다.

break : 조건이 맞으면 반복문 루프를 중단하고 빠져나온다.(반복문 다음의 명령들은 실행)
exit : 조건이 맞으면 gawk 프로그램을 빠져나온다.(gawk 실행 중단)
continue : 조건이 맞으면 현재 반복문의 루프는 건너띄고 다음 루프를 계속 처리한다.






조건문 if

$echo "1 2 heuk" | gawk '{ if ( $2 >= 1 ) { print "Yes" } else { print "No" } }'
Yes

$echo "1 2 heuk" | gawk '{ if ( $2 >= 1 && $3 == "heuk" ) { print "Yes" } else { print "No" } }'
Yes

$echo "1 2 heuk" | gawk '{ if ( $2 >= 1 || $3 != "heuk" ) { print "Yes" } else { print "No" } }'
No

$echo "1 2 heuk" | gawk '{ if ( $4 == NULL ) { print "Yes" } else { print "No" } }'
Yes


if 문도 for 문과 마찬가지로 소괄호에 조건을 작성하고 조건이 '참'인 경우 다음에 오는 중괄호를 처리한다.
뒤에 else 구문을 작성하면 '거짓'인 경우 else 구문을 처리한다. else 구문은 선택사항으로 작성하지 않으면 '거짓'인 경우 아무처리도 하지 않는다.
문자의 경우 큰 따옴표로 묶어야 한다.
조건은 AND(&&), OR(||) 문자로 여러개의 조건을 연결할 수 있다.
값이 없는 경우를 '널(NULL)' 이라고 하며(공백은 NULL이 아님), NULL 또는 null 로 표현한다.






조건문 case

echo "a" | gawk '{ switch ($1) { case "a": print "heuk"; break; case "b": p rint "choo"; break; default: print "good"; break;}}'
heuk

echo "c" | gawk '{ switch ($1) { case "a": print "heuk"; break; case "b": p rint "choo"; break; default: print "good"; break;}}'
good


case 문은 switch 변수값에 따라 각 case를 실행한다.
case 문은 if와 else를 반복하여 구현 가능하지만 case 문을 사용하면 깔끔하게 구현 가능하다.
case에 예외적인 변수값이 들어오면 default를 실행한다.
세미콜론은 각 구문을 구분해 준다.(gawk를 스크립트로 작성할 경우 개행이라 생각하면 된다. C언어의 세미콜론 역할로 생각해도 된다. 다만 필수 입력사항은 아니다.)



전체 0