If Else utasítások használata az awk-ban
Tanuld meg a feltételes utasítások használatát az AWK-ban. Az if else használatával fejlett AWK-szkripteket írhat.
Az AWK egy erőteljes szkriptnyelv, amely a bash shell-be van beépítve.
Rendkívül sokoldalú, és mindenféle adatkinyerési szkript írására használható.
A feltételes utasítások minden programozási vagy szkriptnyelv szerves részét képezik, és az AWK sem különbözik egymástól.
Ebben az oktatóanyagban példákat mutatok be az if-else utasítások használatára az AWK-ban. Íme a mintaadatok, amelyekre a példáimat alapozom.
| ID | Name | Age | Subject |
|---|---|---|---|
| 111 | Farhaan | 18 | DevOps |
| 89 | Alex | 21 | SecOps |
| 92 | Ronn | 22 | IT |
| 100 | Robert | 23 | Commerce |
| 102 | Samantha | 20 | Cloud-Admin |
| 105 | Bob | 21 | Maths |
A students.txt fájlban tárolom. Letöltheti, ha egyedül szeretné kipróbálni a példákat.
1. Az if utasítás az awk-ban
Az if utasítás ellenőrzi, hogy a feltétel igaz-e vagy hamis. Ha a feltétel igaz, akkor végrehajtja az utasításokat.
Íme egy egyszerű szintaxis az if utasításhoz az awk-ban:
awk '{if (condition) {statement} }' [input_file]Most használjuk a students.txt fájl mintaadatait, és nyomtassuk ki a 100-as azonosítójú tanuló adatait az if feltétel használatával az AWK-ban.
awk '{
if ($1=="100")
{
print "............... \n";
print "Name : " ,$2;
print "Age : ",$3;
print "Department : " ,$4;
}
}' students.txtÍme a fenti awk parancs végrehajtása:
A teljes fenti parancs egy mondatban is leírható, így:
awk '{ if ($1=="100") { print "............... \n"; print "Name : " ,$2; print "Age : ",$3; print "Department : " ,$4; } }' students.txtDe az első könnyebben olvasható és érthető.
2. Az if else utasítás az Awk-ban
Az előző példában csak egy feltétel és egy művelet volt. Az if else utasítás kissé eltér az if utasítástól.
Az awk-ban az if else utasítás általános formátuma:
awk '{
if (condition)
{command1}
else
{command2}
}' [input_file]
Itt, ha a feltétel igaz, akkor a parancs1 végrehajtásra kerül, ha a feltétel hamis, akkor az else részből a parancs2.
Vegyük ismét a student.txt adatfájlt.
Tegyük fel, hogy szeretné megkapni az összes olyan diák nevét és tanszékét, akinek életkora 20 év vagy annál kisebb.
Az AWK parancs a következő lehet:
awk '{
if ($3<20)
{
print "Student "$2,"of department", $4, "is less than 20 years old"
}
else
{
print "Student "$2,"of department", $4, "is more than 20 years old"
}
Íme az if else példa végrehajtása és kimenete:
Amint látja, csak két 20 évnél fiatalabb diák van. A többi diák 20 évnél idősebb.
De van egy probléma a fenti példában. Valós adatnak tekinti a táblázat leírását is, és közli velünk, hogy a tanuló neve, életkora, életkora több mint 20 éves.
Javítsuk ezt az if else-if kijelentéssel.
3. Az if else-if utasítás az Awk-ban
Az if else if utasításokkal az awk parancs több feltételt is ellenőriz.
Ha az első feltétel hamis, akkor ellenőrzi a második feltételt. Ha a második feltétel is hamis, akkor ellenőrzi a harmadik feltételt és így tovább. Az összes feltételt addig ellenőrzi, amíg az egyik feltétel teljesül. Ha egyetlen feltétel sem teljesül, akkor a másik rész végrehajtásra kerül.
if(condition1){
command1
}
else if(condition2) {
command2
}
else if(condition3) {
command3
}
.
.
.
else{
commandN
}Az előző példában a kimenet az adatok első sorát is figyelembe vette, ami csak a leírás.
Tegyünk egy feltételt annak ellenőrzésére, hogy az életkor szám-e vagy sem. Regex /[0-9]+$/ kifejezést használok, ami numerikus értékeket jelent. A ~ azt jelenti, hogy az argumentumnak van egy száma. Az előttük lévő negációs operátor pedig azt jelenti, hogy a mezőnek nem szabad számmal rendelkeznie.
awk '{
if (! ($3 ~ /[0-9]+$/))
{
print "Age is just a number but you do not have a number"
}
else if ($3<20)
{
print "Student "$2,"of department", $4, "is less than 20 years old"
}
else
{
print "Student "$2,"of department", $4, "is more than 20 years old"
}
}' students.txtFuttassuk, és fókuszáljunk a kimenet első sorára.
Bónusz tipp: Használjon awk programfájlt
Ha a hosszú awk programok terminálban való írását közvetlenül zavarónak találja, használjon awk fájlokat.
Hozzon létre egy új fájlt, és nevezze el example.awk-nak vagy bármi másnak, amit szeretne. A kiterjesztés itt nem számít. Ez csak megkönnyíti annak megértését, hogy a fájl egy awk programfájl.
A tartalmat az '' közé helyezi, amely a fenti példákban közvetlenül az awk után következik.
{
if (! ($3 ~ /[0-9]+$/))
{
print "Age is just a number but you do not have a number"
}
else if ($3<20)
{
print "Student "$2,"of department", $4, "is less than 20 years old"
}
else
{
print "Student "$2,"of department", $4, "is more than 20 years old"
}
}Most használja ezt az awk fájlt a következő módon:
awk -f example.awk students.txtUgyanazt a kimenetet adja, amit korábban látott.
További bónusztipp: Használja helyette a háromtagú operátort
Az if else utasítások használata helyett az awk-ban használhatja a háromtagú operátort is. A hármas kifejezések az Awk if-else utasításának rövidített változata.
Ha a feltétel igaz, akkor a parancs1 végrehajtódik; egyébként, ha a feltétel hamis, akkor a parancs2 végrehajtásra kerül.
(condition) ? Command1:Command2Tekintsük az awk parancs következő példáját:
awk '{print ($3 <=20)? "Age less than 20: " $2: "Age over 20: " $2}' students.txtEbben a példában a $3 az Age mezőre utal. Ha az életkor kisebb vagy egyenlő, mint 20, akkor kiírja az első olyan parancsot, amely az „Életkor kevesebb, mint 20” üzenetet jeleníti meg. Ha az első rész False, akkor a második parancsot hajtja végre: "Az életkor 20 év felett van".
abhishek@LHB:~$ awk '{print ($3 <=20)? "Age less than 20: " $2: "Age over 20: " $2}' students.txt
Age over 20: Name
Age less than 20: Farhaan
Age over 20: Alex
Age over 20: Ronn
Age over 20: Robert
Age less than 20: Samantha
Age over 20: Bob
Következtetés
Ebben az útmutatóban az if-else utasítások használatának különböző módjait tanulta meg az AWK programozási nyelvben. Ezekkel az utasításokkal szabályozhatja a program menetét, kiértékelheti a feltételt, kivonhatja az adatokat egy fájlból stb.
Ha még néhány példára van szüksége, ez a cikk segít.



