Wyszukiwanie w witrynie

Jak używać instrukcji kontroli przepływu w Awk – część 12


Kiedy przejrzysz wszystkie przykłady Awk, które omówiliśmy do tej pory, od samego początku serii Awk, zauważysz, że wszystkie polecenia w różnych przykładach są wykonywane sekwencyjnie, czyli jedno po drugim. Jednak w pewnych sytuacjach możemy chcieć przeprowadzić pewne operacje filtrowania tekstu w oparciu o pewne warunki i wtedy właśnie pojawia się podejście oparte na instrukcjach kontroli przepływu.

W programowaniu Awk istnieją różne instrukcje sterujące przepływem, do których zaliczają się:

  1. instrukcja if-else
  2. za oświadczenie
  3. podczas gdy oświadczenie
  4. instrukcja „do-while”.
  5. oświadczenie o złamaniu
  6. kontynuować wypowiedź
  7. następne stwierdzenie
  8. instrukcja nextfile
  9. oświadczenie o wyjściu

Jednakże w ramach tej serii omówimy: if-else, for, while i do while instrukcje. Pamiętaj, że omówiliśmy już sposób użycia następnej instrukcji w części 6 tej serii Awk.

1. Instrukcja if-else

Oczekiwana składnia instrukcji if jest podobna do składni instrukcji if powłoki:

if  (condition1) {
     actions1
}
else {
      actions2
}

W powyższej składni condition1 i condition2 są wyrażeniami Awk, a actions1 i actions2 są poleceniami Awk wykonywanymi, gdy odpowiednie warunki są spełnione.

Gdy warunek 1 jest spełniony, czyli jest prawdziwy, wówczas wykonywana jest akcja1 i kończy się instrukcja if, w przeciwnym razie wykonywana jest akcja2 wykonany.

Instrukcję if można także rozszerzyć do instrukcji if-else_if-else, jak poniżej:

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

W przypadku powyższego formularza, jeśli warunek 1 jest prawdziwy, wówczas wykonywane są akcje 1 i kończy się instrukcja if, w przeciwnym razie warunek 2 jest oceniana i jeśli jest prawdziwa, wykonywane są akcje2 i kończy się instrukcja if. Jeśli jednak warunek2 jest fałszywy, wykonywane są akcje3 i kończy się instrukcja if.

Oto przykład użycia instrukcji if, mamy w pliku listę użytkowników i ich wiek, użytkownicy .txt.

Chcemy wydrukować oświadczenie wskazujące imię i nazwisko użytkownika oraz to, czy ma on mniej, czy więcej niż 25 lat.

aaronkilik@tecMint ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

Możemy napisać krótki skrypt powłoki, aby wykonać powyższe zadanie, oto treść skryptu:


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

Następnie zapisz plik i wyjdź, spraw, aby skrypt był wykonywalny i uruchom go w następujący sposób:

chmod +x test.sh
./test.sh
Przykładowe wyjście
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. Instrukcja for

Jeśli chcesz wykonać jakieś polecenia Awk w pętli, instrukcja for oferuje odpowiedni sposób, aby to zrobić, z poniższą składnią:

W tym przypadku podejście jest po prostu definiowane przez użycie licznika do kontrolowania wykonywania pętli, najpierw należy zainicjować licznik, następnie uruchomić go względem warunku testowego, jeśli jest prawdziwy, wykonać działania i na koniec zwiększyć licznik. Pętla kończy się, gdy licznik nie spełnia warunku.

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

Poniższe polecenie Awk pokazuje jak działa instrukcja for, gdzie chcemy wypisać liczby 0-10:

awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Przykładowe wyjście
0
1
2
3
4
5
6
7
8
9
10

3. Instrukcja while

Konwencjonalna składnia instrukcji while jest następująca:

while ( condition ) {
          actions
}

Warunek jest wyrażeniem Awk, a akcje to wiersze poleceń Awk wykonywanych, gdy warunek jest spełniony.

Poniżej znajduje się skrypt ilustrujący użycie instrukcji while do wydrukowania liczb 0-10:

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

Zapisz plik i uczyń skrypt wykonywalnym, a następnie uruchom go:

chmod +x test.sh
./test.sh
Przykładowe wyjście
0
1
2
3
4
5
6
7
8
9
10

4. Instrukcja do while

Jest to modyfikacja powyższej instrukcji while z następującą składnią:

do {
     actions
}
 while (condition) 

Niewielka różnica polega na tym, że w do while polecenia Awk są wykonywane przed oceną warunku. Korzystając z powyższego przykładu z while, możemy zilustrować użycie do while, zmieniając polecenie Awk w skrypcie test.sh jako następująco:

#!/bin/bash

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

Po zmodyfikowaniu skryptu zapisz plik i wyjdź. Następnie uczyń skrypt wykonywalnym i wykonaj go w następujący sposób:

chmod +x test.sh
./test.sh
Przykładowe wyjście
0
1
2
3
4
5
6
7
8
9
10

Wniosek

Nie jest to wyczerpujący przewodnik dotyczący instrukcji kontroli przepływu Awk, jak wspomniałem wcześniej, w Awk jest kilka innych instrukcji kontroli przepływu.

Niemniej jednak ta część serii Awk powinna dać ci jasne, podstawowe pojęcie o tym, jak można kontrolować wykonywanie poleceń Awk w oparciu o pewne warunki.

Możesz równie dobrze objaśnić pozostałe instrukcje dotyczące kontroli przepływu, aby uzyskać lepsze zrozumienie tematu. Wreszcie, w następnej części serii Awk, przejdziemy do pisania skryptów Awk.