Awk에서 흐름 제어 문을 사용하는 방법-12 부


Awk 시리즈의 시작 부분부터 지금까지 다룬 모든 Awk 예제를 검토하면 다양한 예제의 모든 명령이 순차적으로, 즉 차례로 실행되는 것을 알 수 있습니다. 그러나 특정 상황에서는 흐름 제어 명령문의 접근 방식이 설정된 조건에 따라 일부 텍스트 필터링 작업을 실행할 수 있습니다.

Awk 프로그래밍에는 다양한 흐름 제어 문이 있으며 여기에는 다음이 포함됩니다.

  1. if-else statement
  2. for statement
  3. while statement
  4. do-while statement
  5. break statement
  6. continue statement
  7. next statement
  8. nextfile statement
  9. exit statement

그러나이 시리즈의 범위에서는 if-else , for , while do while 문. "이 Awk 시리즈의 Part 6에서 다음 문장을 사용하는 방법을 이미 살펴 보았습니다.

1. if-else 문

if 문 의 예상 구문은 쉘 if 문의 구문과 유사합니다.

if  (condition1) {
     actions1
}
else {
      actions2
}

위의 구문에서 condition1 condition2 는 Awk 표현식이고 actions1 actions2 는 "각 조건이 충족됩니다.

condition1이 충족되면 true이면 actions1이 실행되고 if 문이 종료되고 그렇지 않으면 actions2가 실행됩니다.

if 문은 아래와 같이 if-else_if-else 문으로 확장 할 수도 있습니다.

if (condition1){
     actions1
}
else if (conditions2){
      actions2
}
else{
     actions3
}

위의 형식에서 condition1이 true이면 actions1이 실행되고 if 문이 종료되고, 그렇지 않으면 condition2가 평가되고 true이면 actions2가 실행되고 if 문이 종료됩니다. 그러나 condition2가 false이면 actions3이 실행되고 if 문이 종료됩니다.

다음은 if 문을 사용하는 경우입니다. users.txt 파일에 사용자 및 연령 목록이 저장되어 있습니다.

사용자의 이름과 사용자의 연령이 25 세 이하인지 여부를 나타내는 설명을 인쇄하려고합니다.

[email protected] ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

위의 작업을 수행하기 위해 짧은 쉘 스크립트를 작성할 수 있습니다. 스크립트의 내용은 다음과 같습니다.

#!/bin/bash
awk ' { 
        if ( $3 <= 25 ){
           print "User",$1,$2,"is less than 25 years old." ;
        }
        else {
           print "User",$1,$2,"is more than 25 years old" ; 
}
}'    ~/users.txt

그런 다음 파일을 저장하고 종료하고 스크립트를 실행 가능하게 만들고 다음과 같이 실행하십시오.

$ chmod +x test.sh
$ ./test.sh
User Sarah L is more than 25 years old
User Aaron Kili is more than 25 years old
User John Doo is less than 25 years old.
User Kili Seth is more than 25 years old

2. for 문

루프에서 일부 Awk 명령을 실행하려는 경우 for 문은 아래 구문을 사용하여 적절한 방법을 제공합니다.

여기서 접근 방식은 카운터를 사용하여 루프 실행을 제어하는 것으로 간단히 정의됩니다. 먼저 카운터를 초기화 한 다음 테스트 조건에 대해 실행해야합니다. 참이면 작업을 실행하고 마지막으로 카운터를 증가시킵니다. 카운터가 조건을 만족하지 않으면 루프가 종료됩니다.

for ( counter-initialization; test-condition; counter-increment ){
      actions
}

다음 Awk 명령은 for 문이 작동하는 방식을 보여줍니다. 여기서 숫자 0-10을 인쇄합니다.

$ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
0
1
2
3
4
5
6
7
8
9
10

3. while 문

while 문의 일반적인 구문은 다음과 같습니다.

while ( condition ) {
          actions
}

조건은 Awk 표현식이고 작업은 조건이 참일 때 실행되는 Awk 명령 행입니다.

다음은 while 문을 사용하여 숫자 0-10을 인쇄하는 방법을 설명하는 스크립트입니다.

#!/bin/bash
awk ' BEGIN{ counter=0 ;
         
        while(counter<=10){
              print counter;
              counter+=1 ;
             
}
}  

파일을 저장하고 스크립트를 실행 가능하게 만든 다음 실행하십시오.

$ chmod +x test.sh
$ ./test.sh
0
1
2
3
4
5
6
7
8
9
10

4. do while 문

위의 while 문을 다음과 같은 기본 구문으로 수정 한 것입니다.

do {
     actions
}
 while (condition) 

약간의 차이점은 do while에서 조건이 평가되기 전에 Awk 명령이 실행된다는 것입니다. 위의 while 문 아래의 예제를 사용하여 test.sh 스크립트에서 Awk 명령을 다음과 같이 변경하여 do while 사용을 설명 할 수 있습니다.

#!/bin/bash

awk ' BEGIN{ counter=0 ;  
        do{
            print counter;  
            counter+=1 ;    
        }
        while (counter<=10)   
} 
'

스크립트를 수정 한 후 파일을 저장하고 종료합니다. 그런 다음 스크립트를 실행 가능하게 만들고 다음과 같이 실행하십시오.

$ chmod +x test.sh
$ ./test.sh
0
1
2
3
4
5
6
7
8
9
10

결론

이것은 Awk 흐름 제어 문에 관한 포괄적 인 가이드가 아닙니다. 앞서 언급했듯이 Awk에는 여러 다른 흐름 제어 문이 있습니다.

그럼에도 불구하고 Awk 시리즈의이 부분은 특정 조건에 따라 Awk 명령 실행을 제어 할 수있는 방법에 대한 명확한 기본 아이디어를 제공해야합니다.

나머지 흐름 제어 문에 대해 더 자세히 설명하여 주제에 대해 더 잘 이해할 수 있습니다. 마지막으로 Awk 시리즈의 다음 섹션에서는 Awk 스크립트 작성으로 이동합니다.