Kif tuża Dikjarazzjonijiet tal-Kontroll tal-Fluss f'Awk - Parti 12
Meta tirrevedi l-eżempji Awk kollha li koprejna s'issa, sa mill-bidu ta 'l-operazzjonijiet ta' filtrazzjoni tat-test ibbażati fuq xi kundizzjonijiet, dak huwa fejn jidħol l-approċċ tad-dikjarazzjonijiet tal-kontroll tal-fluss.
Hemm diversi dikjarazzjonijiet tal-kontroll tal-fluss fl-ipprogrammar Awk u dawn jinkludu:
- dikjarazzjoni jekk inkella
- għal dikjarazzjoni
- waqt li stqarrija
- dikjarazzjoni do-while
- dikjarazzjoni tal-waqfa
- kompli dikjarazzjoni
- dikjarazzjoni li jmiss
- dikjarazzjoni tal-fajl li jmiss
- dikjarazzjoni tal-ħruġ
Madankollu, għall-ambitu ta’ din is-serje, se nesponi fuq: if-else
, for
, while
u do while
kodiċi> dikjarazzjonijiet. Ftakar li diġà għaddejna minn serje Awk.
1. Id-Dikjarazzjoni jekk inkella
Is-sintassi mistennija tad-dikjarazzjoni if
hija simili għal dik tad-dikjarazzjoni if tal-qoxra:
if (condition1) { actions1 } else { actions2 }
Fis-sintassi ta’ hawn fuq, condition1
u condition2
huma espressjonijiet Awk, u actions1
u actions2
huma kmandi Awk esegwiti meta l- kundizzjonijiet rispettivi huma sodisfatti.
Meta l-kundizzjoni1 tkun sodisfatta, jiġifieri hija vera, allura actions1 tiġi eżegwita u d-dikjarazzjoni if toħroġ, inkella actions2 tiġi eżegwita.
Id-dikjarazzjoni jekk tista' wkoll tiġi estiża għal dikjarazzjoni if-else_if-else
kif hawn taħt:
if (condition1){ actions1 } else if (conditions2){ actions2 } else{ actions3 }
Għall-formola ta' hawn fuq, jekk il-kundizzjoni1 hija vera, allura actions1 tiġi eżegwita u d-dikjarazzjoni if toħroġ, inkella l-kundizzjoni2 tiġi evalwata u jekk hija vera, allura l-azzjonijiet2 tiġi esegwita u l-istqarrija if toħroġ. Madankollu, meta l-kundizzjoni2 tkun falza allura, actions3 tiġi eżegwita u d-dikjarazzjoni if toħroġ.
Hawnhekk huwa każ fil-punt ta 'użu if dikjarazzjonijiet, għandna lista ta' utenti u l-etajiet tagħhom maħżuna fil-fajl, users.txt.
Irridu nipprintjaw dikjarazzjoni li tindika l-isem tal-utent u jekk l-età tal-utent hijiex inqas jew aktar minn 25 sena.
[email ~ $ cat users.txt Sarah L 35 F Aaron Kili 40 M John Doo 20 M Kili Seth 49 M
Nistgħu niktbu script shell qasir biex inwettqu x-xogħol tagħna hawn fuq, hawn hu l-kontenut tal-iskrittura:
#!/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
Imbagħad issalva l-fajl u oħroġ, agħmel l-iskript eżekutibbli u mexxiha kif ġej:
$ 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. Il-għal Dikjarazzjoni
F'każ li trid tesegwixxi xi kmandi Awk f'linja, allura l-istqarrija for toffrilek mod xieraq biex tagħmel dan, bis-sintassi hawn taħt:
Hawnhekk, l-approċċ huwa sempliċement definit mill-użu ta 'counter biex jikkontrolla l-eżekuzzjoni tal-linja, l-ewwel għandek bżonn tibda l-counter, imbagħad tmexxih kontra kundizzjoni tat-test, jekk ikun veru, tesegwixxi l-azzjonijiet u finalment inkrementa l-counter. Il-linja tintemm meta l-counter ma jissodisfax il-kundizzjoni.
for ( counter-initialization; test-condition; counter-increment ){ actions }
Il-kmand Awk li ġej juri kif taħdem id-dikjarazzjoni for, fejn irridu nipprintjaw in-numri 0-10:
$ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
0 1 2 3 4 5 6 7 8 9 10
3. Id-Dikjarazzjoni filwaqt
Is-sintassi konvenzjonali tad-dikjarazzjoni while hija kif ġej:
while ( condition ) { actions }
Il-kundizzjoni hija espressjoni Awk u l-azzjonijiet huma linji ta 'kmandi Awk esegwiti meta l-kundizzjoni tkun vera.
Hawn taħt hawn skript biex turi l-użu tad-dikjarazzjoni while biex tipprintja n-numri 0-10:
#!/bin/bash awk ' BEGIN{ counter=0 ; while(counter<=10){ print counter; counter+=1 ; } }
Issejvja l-fajl u agħmel l-iskritt eżekutibbli, imbagħad mexxih:
$ chmod +x test.sh $ ./test.sh
0 1 2 3 4 5 6 7 8 9 10
4. Il-do while Dikjarazzjoni
Hija modifika tad-dikjarazzjoni while hawn fuq, bis-sintassi sottostanti li ġejja:
do { actions } while (condition)
Id-differenza żgħira hija li, taħt do while, il-kmandi Awk huma esegwiti qabel ma l-kundizzjoni tiġi evalwata. Billi nużaw l-eżempju stess taħt id-dikjarazzjoni filwaqt li hawn fuq, nistgħu nuru l-użu ta 'do while billi nbiddlu l-kmand Awk fl-iskrittura test.sh kif ġej:
#!/bin/bash awk ' BEGIN{ counter=0 ; do{ print counter; counter+=1 ; } while (counter<=10) } '
Wara li timmodifika l-iskrittura, issalva l-fajl u oħroġ. Imbagħad agħmel l-iskritt eżekutibbli u eżegwitu kif ġej:
$ chmod +x test.sh $ ./test.sh
0 1 2 3 4 5 6 7 8 9 10
Konklużjoni
Din mhix gwida komprensiva dwar id-dikjarazzjonijiet tal-kontroll tal-fluss Awk, kif kont semmejt qabel, hemm bosta dikjarazzjonijiet oħra tal-kontroll tal-fluss f'Awk.
Madankollu, din il-parti tas-serje Awk għandha tagħtik idea fundamentali ċara ta 'kif l-eżekuzzjoni tal-kmandi Awk tista' tiġi kkontrollata abbażi ta 'ċerti kundizzjonijiet.
Tista 'wkoll tesponi aktar dwar il-bqija tad-dikjarazzjonijiet tal-kontroll tal-fluss biex tikseb aktar fehim dwar is-suġġett. Fl-aħħarnett, fit-taqsima li jmiss tas-serje Awk, se ngħaddu biex niktbu skripts Awk.