웹사이트 검색

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


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

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

  1. if-else 문
  2. for 문
  3. while문
  4. do while 문
  5. break 문
  6. 계속 진술
  7. 다음 진술
  8. nextfile 문
  9. 종료문

그러나 이 시리즈의 범위에서는 if-else, for, whiledo while에 대해 설명하겠습니다. 코드> 진술. 이 Awk 시리즈의 6부에서 다음 문을 사용하는 방법을 이미 살펴봤다는 것을 기억하세요.

1. if-else 문

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

if  (condition1) {
     actions1
}
else {
      actions2
}

위 구문에서 condition1condition2는 Awk 표현식이고, actions1actions2는 다음과 같은 경우에 실행되는 Awk 명령입니다. 각각의 조건이 만족됩니다.

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 문을 사용하는 경우입니다. 사용자 목록과 해당 연령이 파일에 저장되어 있습니다. .txt.

우리는 사용자의 이름과 사용자의 나이가 25세 미만인지 이상인지를 나타내는 설명을 인쇄하려고 합니다.

aaronkilik@tecMint ~ $ 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 문은 아래 구문을 사용하여 이를 수행하는 적절한 방법을 제공합니다.

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

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

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

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 명령 라인입니다.

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

#!/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 스크립트 작성에 대해 살펴보겠습니다.