Awk-da akymlara gözegçilik jümlelerini nädip ulanmaly - 12-nji bölüm


Şu wagta çenli açan ähli Awk mysallarymyzy gözden geçireniňizde, käbir şertlere esaslanan tekst süzgüç amallarynyň başyndan başlap, akym gözegçiliginiň beýany şol ýerde ýerleşýär.

Awk programmirlemesinde dürli akymlara gözegçilik jümleleri bar we şulary öz içine alýar:

  1. if-else beýany
  2. beýannama üçin
  3. beýannama
  4. ýerine ýetiriş beýany
  5. arakesme
  6. beýany dowam et
  7. indiki jümle
  8. indiki faýl beýany
  9. çykyş beýany

Şeýle-de bolsa, bu tapgyryň çäginde düşündirip bileris: if-else , üçin , while we jümleler Awk seriýasyny eýýäm geçendigimizi ýadyňyzdan çykarmaň.

1. if-else beýany

sözlemi garaşylýan sintaksis, eger jümle bolsa gabygyňky ýaly bolsa:

if  (condition1) {
     actions1
}
else {
      actions2
}

Aboveokardaky sintaksisde condition1 we condition2 Awk aňlatmalary, we actions1 we actions2 Awk buýruklary degişli şertler kanagatlandyrylýar.

1-nji şert kanagatlandyrylanda, bu hakykat diýmek, hereketler1 ýerine ýetirilýär we jümle çyksa, başgaça hereketler ýerine ýetirilýär.

If jümläni aşakdaky ýaly if-else_if-else beýanyna çenli giňeldip bolar:

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

Aboveokardaky forma üçin, 1-nji şert dogry bolsa, onda hereketler1 ýerine ýetirilýär we eger jümle çyksa, başgaça şert2 baha berilýär we dogry bolsa, hereketler 2 ýerine ýetirilýär we if jümle çykýar. Şeýle-de bolsa, 2-nji şert ýalňyş bolsa, hereketler3 ýerine ýetirilýär we if beýany çyksa.

Ynha, jümleleri ulanmagyň mysaly, ulanyjylaryň sanawy we ulanyjylary.txt faýlynda saklanýan ýaşlary bar.

Ulanyjynyň adyny we ulanyjynyň ýaşynyň 25 ýaşdan azdygyny ýa-da ýokdugyny görkezýän jümle çap etmek isleýäris.

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

Aboveokardaky işimizi ýerine ýetirmek üçin gysga gabyk skriptini ýazyp bileris, ssenariýanyň mazmuny:

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

Soňra faýly ýazdyryň we çykyň, skripti ýerine ýetirip, aşakdaky ýaly işlediň:

$ 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. Beýannama üçin

Käbir Awk buýruklaryny aýlawda ýerine ýetirmek isleýän bolsaňyz, jümle aşakdaky sintaksis bilen size muny etmegiň amatly usulyny hödürleýär:

Bu ýerde çemeleşme, aýlawyň ýerine ýetirilişine gözegçilik etmek üçin hasaplaýjynyň kömegi bilen kesgitlenýär, ilki bilen hasaplaýjyny başlamaly, soňra synag şertine garşy işlemeli, eger hakykat bolsa, hereketleri ýerine ýetiriň we ahyrynda hasaplaýjyny köpeltmeli. Hasaplaýjy şerti kanagatlandyrmasa, aýlaw gutarýar.

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

Aşakdaky Awk buýrugy, 0-10 sanlary çap etmek isleýän ýerimizde jümläniň nähili işleýändigini görkezýär:

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

3. Wagtlaýyn beýannama

Wagtlaýyn sözlemiň adaty sintaksisi aşakdaky ýaly:

while ( condition ) {
          actions
}

.Agdaý Awk aňlatmasydyr we hereketler, şert dogry bolanda ýerine ýetirilýän Awk buýruklarynyň setirleridir.

Aşakda 0-10 sanlary çap etmek üçin sözlemiň ulanylyşyny görkezýän skript bar:

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

Faýly ýazdyryň we skripti ýerine ýetirip bilersiňiz, soňra işlediň:

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

4. Beýannama wagtynda ýerine ýetiriň

Aboveokardaky sözlemiň aşakdaky esasy sintaksis bilen üýtgemegi:

do {
     actions
}
 while (condition) 

Az salym tapawudy, Awk buýruklary şert bahalandyrylmazdan ozal ýerine ýetirilýär. Aboveokardaky jümläniň aşagyndaky mysaly ulanyp, test.sh skriptindäki Awk buýrugyny aşakdaky ýaly üýtgedip, do ulanylyşyny görkezip bileris:

#!/bin/bash

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

Scriptazgy üýtgedilenden soň faýly ýazdyryň we çykyň. Soňra skripti ýerine ýetirip, aşakdaky ýaly ýerine ýetiriň:

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

Netije

Bu Awk akymyna gözegçilik jümleleri barada giňişleýin gollanma däl, ýokarda belläp geçişim ýaly, Awk-da başga-da birnäçe akym gözegçiligi jümleleri bar.

Muňa garamazdan, “Awk” seriýasynyň bu bölümi size “Awk” buýruklarynyň ýerine ýetirilişini belli bir şertlere gözegçilik edip boljakdygy barada anyk düşünje bermeli.

Mundan başga-da, mowzuga has köp düşünmek üçin akym gözegçiliginiň galan böleginde has köp maglumat berip bilersiňiz. Ahyrynda, Awk seriýasynyň indiki bölüminde Awk skriptlerini ýazmaga geçeris.


Rightshli hukuklar goralandyr. © Linux-Console.net • 2019-2024