Awk'da Akış Kontrol İfadeleri Nasıl Kullanılır - Bölüm 12


Awk serisinin başlangıcından itibaren şu ana kadar ele aldığımız tüm Awk örneklerini incelediğinizde, çeşitli örneklerdeki tüm komutların sıralı olarak, yani birbiri ardına yürütüldüğünü fark edeceksiniz. Ancak belirli durumlarda, bazı koşullara dayalı olarak bazı metin filtreleme işlemlerini çalıştırmak isteyebiliriz; akış kontrol ifadelerinin yaklaşımı burada devreye girer.

Awk programlamada çeşitli akış kontrol ifadeleri vardır ve bunlar şunları içerir:

  1. if-else ifadesi
  2. beyan için
  3. while ifadesi
  4. do-while ifadesi
  5. mola ifadesi
  6. açıklamaya devam et
  7. sonraki ifade
  8. sonraki dosya beyanı
  9. çıkış beyanı

Ancak bu serinin kapsamı için şunları açıklayacağız: if-else, for, while ve do while kod> ifadeler. Bu Awk serisinin 6. Bölümünde bir sonraki ifadenin nasıl kullanılacağını zaten incelediğimizi unutmayın.

1. if-else İfadesi

if ifadesinin beklenen sözdizimi, kabuk if ifadesininkine benzer:

if  (condition1) {
     actions1
}
else {
      actions2
}

Yukarıdaki sözdiziminde, koşul1 ve koşul2, Awk ifadeleridir ve actions1 ve actions2, aşağıdaki durumlarda çalıştırılan Awk komutlarıdır: ilgili koşullar yerine getirilir.

koşul1 karşılandığında, yani doğru olduğunda, actions1 yürütülür ve if ifadesi'den çıkılır; aksi halde actions2 şöyle olur: uygulanmış.

if ifadesi ayrıca aşağıdaki gibi bir if-else_if-else ifadesine genişletilebilir:

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

Yukarıdaki form için, koşul1 doğruysa eylemler1 yürütülür ve if ifadesi çıkar, aksi halde koşul2 değerlendirilir ve doğruysa actions2 yürütülür ve if ifadesi'den çıkılır. Ancak koşul2 yanlış olduğunda, actions3 yürütülür ve if ifadesi çıkar.

Burada if ifadelerinin kullanımına ilişkin bir örnek verilmiştir; dosyada depolanan kullanıcılar ve onların yaşları'nın bir listesi vardır: kullanıcılar .txt.

Bir kullanıcının adını ve kullanıcının yaşının 25 yaşından küçük veya büyük olduğunu belirten bir bildirim yazdırmak istiyoruz.

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

Yukarıdaki işimizi gerçekleştirmek için kısa bir kabuk scripti yazabiliriz, scriptin içeriği şu şekildedir:


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

Daha sonra dosyayı kaydedin ve çıkın, betiği çalıştırılabilir hale getirin ve aşağıdaki gibi çalıştırın:

chmod +x test.sh
./test.sh
Örnek Çıktı
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 Beyanı

Bazı Awk komutlarını bir döngüde yürütmek istemeniz durumunda, for ifadesi size aşağıdaki sözdizimiyle bunu yapmanın uygun bir yolunu sunar:

Burada yaklaşım, döngünün yürütülmesini kontrol etmek için bir sayacın kullanılmasıyla basitçe tanımlanır; önce sayacı başlatmanız, ardından onu bir test koşuluna göre çalıştırmanız, eğer doğruysa eylemleri yürütmeniz ve son olarak sayacı artırmanız gerekir. Sayaç koşulu sağlamadığında döngü sona erer.

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

Aşağıdaki Awk komutu, 0-10 rakamlarını yazdırmak istediğimiz for ifadesinin nasıl çalıştığını gösterir:

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

3. while İfadesi

While ifadesinin geleneksel sözdizimi aşağıdaki gibidir:

while ( condition ) {
          actions
}

Koşul bir Awk ifadesidir ve eylemler, koşul doğru olduğunda yürütülen Awk komutlarının satırlarıdır.

Aşağıda, 0-10 rakamlarını yazdırmak için while ifadesinin kullanımını gösteren bir komut dosyası bulunmaktadır:

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

Dosyayı kaydedin ve komut dosyasını yürütülebilir hale getirin, ardından çalıştırın:

chmod +x test.sh
./test.sh
Örnek Çıktı
0
1
2
3
4
5
6
7
8
9
10

4. Do while İfadesi

Yukarıdaki while ifadesinin aşağıdaki temel sözdizimiyle değiştirilmiş halidir:

do {
     actions
}
 while (condition) 

Küçük fark, do while altında Awk komutlarının koşul değerlendirilmeden önce yürütülmesidir. Yukarıdaki while ifadesi altındaki örneği kullanarak, test.sh betiğindeki Awk komutunu şu şekilde değiştirerek do while kullanımını gösterebiliriz. şöyle:

#!/bin/bash

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

Komut dosyasını değiştirdikten sonra dosyayı kaydedin ve çıkın. Daha sonra betiği çalıştırılabilir hale getirin ve aşağıdaki şekilde çalıştırın:

chmod +x test.sh
./test.sh
Örnek Çıktı
0
1
2
3
4
5
6
7
8
9
10

Çözüm

Bu, Awk akış kontrol ifadeleriyle ilgili kapsamlı bir kılavuz değildir; daha önce de belirttiğim gibi, Awk'ta başka birkaç akış kontrol ifadesi de vardır.

Bununla birlikte, Awk serisinin bu kısmı size Awk komutlarının yürütülmesinin belirli koşullara göre nasıl kontrol edilebileceği konusunda net bir temel fikir verecektir.

Konuyu daha iyi anlamak için akış kontrol ifadelerinin geri kalanını da daha fazla açıklayabilirsiniz. Son olarak Awk serisinin bir sonraki bölümünde Awk senaryolarını yazmaya geçeceğiz.