Awk-ൽ ഫ്ലോ കൺട്രോൾ സ്റ്റേറ്റ്uമെന്റുകൾ എങ്ങനെ ഉപയോഗിക്കാം - ഭാഗം 12


ചില വ്യവസ്ഥകളെ അടിസ്ഥാനമാക്കി ടെക്സ്റ്റ് ഫിൽട്ടറിംഗ് പ്രവർത്തനങ്ങളുടെ തുടക്കം മുതൽ ഞങ്ങൾ ഇതുവരെ ഉൾപ്പെടുത്തിയിട്ടുള്ള എല്ലാ Awk ഉദാഹരണങ്ങളും നിങ്ങൾ അവലോകനം ചെയ്യുമ്പോൾ, അവിടെയാണ് ഒഴുക്ക് നിയന്ത്രണ പ്രസ്താവനകളുടെ സമീപനം ആരംഭിക്കുന്നത്.

Awk പ്രോഗ്രാമിംഗിൽ വിവിധ ഫ്ലോ കൺട്രോൾ പ്രസ്താവനകൾ ഉണ്ട്, അവയിൽ ഇവ ഉൾപ്പെടുന്നു:

  1. if-else statement
  2. പ്രസ്താവനയ്ക്കായി
  3. അതേസമയം പ്രസ്താവന
  4. ഡു-വെയിൽ സ്റ്റേറ്റ്uമെന്റ്
  5. ബ്രേക്ക് സ്റ്റേറ്റ്മെന്റ്
  6. പ്രസ്താവന തുടരുക
  7. അടുത്ത പ്രസ്താവന
  8. അടുത്ത ഫയൽ പ്രസ്താവന
  9. എക്സിറ്റ് സ്റ്റേറ്റ്മെന്റ്

എന്നിരുന്നാലും, ഈ ശ്രേണിയുടെ വ്യാപ്തിക്കായി, ഞങ്ങൾ ഇനിപ്പറയുന്ന കാര്യങ്ങൾ വിശദീകരിക്കും: ഇല്ലെങ്കിൽ, for, while, do while പ്രസ്താവനകൾ. ഞങ്ങൾ ഇതിനകം Awk സീരീസിലൂടെ നടന്നുവെന്ന് ഓർക്കുക.

1. if-else പ്രസ്താവന

if സ്റ്റേറ്റ്മെന്റ് ന്റെ പ്രതീക്ഷിക്കുന്ന വാക്യഘടന ഷെൽ if സ്റ്റേറ്റ്മെന്റിന് സമാനമാണ്:

if  (condition1) {
     actions1
}
else {
      actions2
}

മുകളിലെ വാക്യഘടനയിൽ, condition1, condition2 എന്നിവ Awk എക്uസ്uപ്രഷനുകളാണ്, കൂടാതെ പ്രവർത്തനങ്ങൾ1, actions2 എന്നിവ Awk കമാൻഡുകളാണ്. ബന്ധപ്പെട്ട വ്യവസ്ഥകൾ തൃപ്തികരമാണ്.

കണ്ടീഷൻ1 തൃപ്തികരമാകുമ്പോൾ, അത് ശരിയാണെന്ന് അർത്ഥമാക്കുന്നു, തുടർന്ന് actions1 എക്സിക്യൂട്ട് ചെയ്യുകയും if സ്റ്റേറ്റ്മെന്റ് പുറത്തുകടക്കുകയും ചെയ്യുന്നു, അല്ലാത്തപക്ഷം actions2 എക്സിക്യൂട്ട് ചെയ്യപ്പെടും.

if സ്റ്റേറ്റ്uമെന്റ് താഴെ പറയുന്നതുപോലെ ഒരു if-else_if-else പ്രസ്താവനയിലേക്കും വികസിപ്പിക്കാം:

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

മുകളിലെ ഫോമിന്, condition1 ശരിയാണെങ്കിൽ, actions1 എക്സിക്യൂട്ട് ചെയ്യുകയും if സ്റ്റേറ്റ്മെന്റ് എക്സിറ്റ് ചെയ്യുകയും ചെയ്യുന്നു, അല്ലാത്തപക്ഷം condition2 വിലയിരുത്തപ്പെടുന്നു, അത് ശരിയാണെങ്കിൽ, actions2 എക്സിക്യൂട്ട് ചെയ്യുകയും if സ്റ്റേറ്റ്മെന്റ് പുറത്തുകടക്കുകയും ചെയ്യുന്നു. എന്നിരുന്നാലും, കണ്ടിഷൻ2 തെറ്റാണെങ്കിൽ, actions3 എക്സിക്യൂട്ട് ചെയ്യുകയും if സ്റ്റേറ്റ്മെന്റ് പുറത്തുകടക്കുകയും ചെയ്യുന്നു.

if സ്റ്റേറ്റ്uമെന്റുകൾ ഉപയോഗിക്കുന്നതിനുള്ള ഒരു സാഹചര്യം ഇതാ, ഉപയോക്താക്കളുടെയും അവരുടെ പ്രായത്തിന്റെയും ഒരു ലിസ്റ്റ് ഞങ്ങൾ ഫയലിൽ സംഭരിച്ചിട്ടുണ്ട്, 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 സ്റ്റേറ്റ്uമെന്റ് അതിനുള്ള അനുയോജ്യമായ മാർഗം നിങ്ങൾക്ക് വാഗ്ദാനം ചെയ്യുന്നു:

ഇവിടെ, ലൂപ്പ് എക്സിക്യൂഷൻ നിയന്ത്രിക്കുന്നതിന് ഒരു കൌണ്ടർ ഉപയോഗിച്ചാണ് സമീപനം ലളിതമായി നിർവചിച്ചിരിക്കുന്നത്, ആദ്യം നിങ്ങൾ കൌണ്ടർ സമാരംഭിക്കേണ്ടതുണ്ട്, തുടർന്ന് ഒരു ടെസ്റ്റ് വ്യവസ്ഥയ്ക്ക് എതിരായി അത് പ്രവർത്തിപ്പിക്കുക, അത് ശരിയാണെങ്കിൽ, പ്രവർത്തനങ്ങൾ നടപ്പിലാക്കുകയും അവസാനം കൗണ്ടർ വർദ്ധിപ്പിക്കുകയും ചെയ്യുക. കൌണ്ടർ വ്യവസ്ഥയെ തൃപ്തിപ്പെടുത്താത്തപ്പോൾ ലൂപ്പ് അവസാനിക്കുന്നു.

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

ഇനിപ്പറയുന്ന Awk കമാൻഡ് ഫോർ സ്റ്റേറ്റ്uമെന്റ് എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് കാണിക്കുന്നു, അവിടെ നമുക്ക് 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 ( condition ) {
          actions
}

കണ്ടീഷൻ ഒരു Awk എക്uസ്uപ്രഷൻ ആണ്, കൂടാതെ നിബന്ധന ശരിയായിരിക്കുമ്പോൾ എക്uസിക്യൂട്ട് ചെയ്യുന്ന Awk കമാൻഡുകളുടെ ലൈനുകളാണ് പ്രവർത്തനങ്ങൾ.

0-10 അക്കങ്ങൾ പ്രിന്റ് ചെയ്യുന്നതിനായി while സ്റ്റേറ്റ്uമെന്റിന്റെ ഉപയോഗം ചിത്രീകരിക്കുന്നതിനുള്ള ഒരു സ്uക്രിപ്റ്റ് ചുവടെയുണ്ട്:

#!/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 {
     actions
}
 while (condition) 

ചെറിയ വ്യത്യാസം എന്തെന്നാൽ, do while ന് കീഴിൽ, അവസ്ഥ വിലയിരുത്തുന്നതിന് മുമ്പ് Awk കമാൻഡുകൾ എക്സിക്യൂട്ട് ചെയ്യുന്നു. മുകളിലെ while സ്റ്റേറ്റ്uമെന്റിന് കീഴിലുള്ള ഉദാഹരണം ഉപയോഗിച്ച്, test.sh സ്uക്രിപ്റ്റിലെ 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 ഫ്ലോ കൺട്രോൾ സ്റ്റേറ്റ്uമെന്റുകളെക്കുറിച്ചുള്ള സമഗ്രമായ ഒരു ഗൈഡ് അല്ല, ഞാൻ നേരത്തെ സൂചിപ്പിച്ചതുപോലെ, Awk-ൽ മറ്റ് നിരവധി ഫ്ലോ കൺട്രോൾ സ്റ്റേറ്റ്uമെന്റുകളുണ്ട്.

എന്നിരുന്നാലും, ചില വ്യവസ്ഥകളെ അടിസ്ഥാനമാക്കി Awk കമാൻഡുകളുടെ നിർവ്വഹണം എങ്ങനെ നിയന്ത്രിക്കാം എന്നതിനെക്കുറിച്ചുള്ള വ്യക്തമായ അടിസ്ഥാന ആശയം Awk സീരീസിന്റെ ഈ ഭാഗം നിങ്ങൾക്ക് നൽകും.

വിഷയത്തിൽ കൂടുതൽ ധാരണ നേടുന്നതിന് ബാക്കിയുള്ള ഫ്ലോ കൺട്രോൾ പ്രസ്താവനകളെക്കുറിച്ച് നിങ്ങൾക്ക് കൂടുതൽ വിശദീകരിക്കാം. അവസാനമായി, Awk സീരീസിന്റെ അടുത്ത വിഭാഗത്തിൽ, ഞങ്ങൾ Awk സ്ക്രിപ്റ്റുകൾ എഴുതുന്നതിലേക്ക് നീങ്ങും.