Како да користите изјави за контрола на проток во Awk - Дел 12


Кога ќе ги прегледате сите примери на Awk што ги опфативме досега, уште од почетокот на операциите за филтрирање на текст врз основа на некои услови, тука започнува пристапот на изјавите за контрола на протокот.

Постојат различни изјави за контрола на проток во програмирањето Awk и тие вклучуваат:

  1. изјава ако-инаку
  2. за изјава
  3. додека изјава
  4. изјава do-while
  5. изјава за прекин
  6. продолжете со изјавата
  7. следна изјава
  8. следна изјава за датотека
  9. изјава за излез

Меѓутоа, за опсегот на оваа серија, ќе објасниме за: if-else, for, while и направи додека изјави. Запомнете дека веќе прошетавме низ серијата Awk.

1. Изјавата ако-друго

Очекуваната синтакса на изјавата if е слична на онаа на изјавата на школка if:

if  (condition1) {
     actions1
}
else {
      actions2
}

Во горната синтакса, condition1 и condition2 се Awk изрази, а actions1 и actions2 се команди Awk кои се извршуваат кога соодветните услови се исполнети.

Кога условот 1 е исполнет, што значи дека е точно, тогаш се извршува actions1 и излегува изјавата if, инаку се извршува actions2.

Изјавата if може да се прошири и на изјава if-else_if-else како што е подолу:

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

За горната форма, ако условот1 е точно, тогаш се извршува actions1 и излегува изјавата if, инаку се оценува условот2, а ако е точно, тогаш се извршува actions2 и излегува изјавата if. Меѓутоа, кога условот2 е неточен, тогаш се извршува actions3 и исказот if излегува.

Еве еден случај во смисла на користење на изјавите if, имаме список на корисници и нивните возрасти зачувани во датотеката users.txt.

Сакаме да испечатиме изјава во која се наведува името на корисникот и дали возраста на корисникот е помала или повеќе од 25 години.

[email  ~ $ 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. Изјавата за

Во случај да сакате да извршите некои Awk команди во циклус, тогаш изјавата for ви нуди соодветен начин да го направите тоа, со синтаксата подолу:

Овде, пристапот е едноставно дефиниран со употреба на бројач за контролирање на извршувањето на јамката, прво треба да го иницијализирате бројачот, потоа да го извршите според условот за тестирање, ако е точно, извршете ги дејствата и на крајот да го зголемите бројачот. Јамката завршува кога бројачот не го задоволува условот.

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

Следната команда Awk покажува како функционира изјавата за, каде што сакаме да ги испечатиме броевите 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 погоре, можеме да ја илустрираме употребата на do while со менување на командата Awk во скриптата test.sh на следниов начин:

#!/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.