Tento článek je součástí probíhající série příkladů výukových programů Awk. V našich dřívějších článcích o awk jsme diskutovali o tisku awk, uživatelsky definovaných proměnných awk, vestavěných proměnných awk a awk operátorech.
V tomto tutoriálu awk si projdeme příkazy awk podmíněné if s praktickými příklady.
Awk podporuje mnoho podmíněných příkazů pro řízení toku programu. Většina syntaxe podmíněného příkazu Awk vypadá jako programovací jazyk „C“.
Normálně podmíněný příkaz kontroluje podmínku před provedením jakékoli akce. Pokud je podmínka pravdivá, provedou se akce. Podobně lze akci provést, pokud je podmínka nepravdivá.
Podmíněný příkaz začíná klíčovým slovem „if“. Awk podporuje dva různé druhy příkazů if.
- Příkaz Awk Simple If
- Příkaz Awk If-Else
- Awk If-ElseIf-Ladder
Příkaz Awk Simple If
Jedna akce: Jednoduché Pokud se ke kontrole podmínek používá příkaz, pokud podmínka vrátí hodnotu true, provede odpovídající akce.
Syntax: if (conditional-expression) action
- if je klíčové slovo
- podmíněný výraz – výraz pro kontrolu podmínek
- akce – jakýkoli awk příkaz k provedení akce.
Vícenásobná akce: Pokud podmíněný výraz vrátí hodnotu true, bude provedena akce. Pokud je třeba provést více než jednu akci, měly by být akce uzavřeny do složených závorek a oddělit je na nový řádek nebo středník, jak je znázorněno níže.
Syntax: if (conditional-expression) { action1; action2; }
Pokud je podmínka pravdivá, všechny akce uzavřené ve složených závorkách budou provedeny v daném pořadí. Po provedení všech akcí pokračuje ve vykonávání dalších příkazů.
Příkaz Awk If Else
Ve výše uvedeném jednoduchém příkazu awk If neexistuje žádná sada akcí v případě, že je podmínka nepravdivá. V příkazu awk If Else můžete zadat seznam akcí, které se mají provést, pokud je podmínka nepravdivá. Pokud podmínka vrátí true, bude provedena akce 1, pokud je podmínka nepravda, bude provedena akce 2.
Syntax: if (conditional-expression) action1 else action2
Awk má také podmíněný operátor, tj. ternární operátor ( ?:), jehož funkce je podobná příkazu awk If Else. Pokud je podmíněný-výraz pravdivý, bude provedena akce1 a pokud je podmíněný-výraz nepravda, provede se akce2.
Syntax: conditional-expression ? action1 : action2 ;
Awk If Else If žebřík
if(conditional-expression1) action1; else if(conditional-expression2) action2; else if(conditional-expression3) action3; . . else action n;
- Pokud je podmíněný-výraz1 pravdivý, bude provedena akce1.
- Pokud je podmíněný-výraz1 nepravdivý, bude zkontrolován podmíněný-výraz2, pokud je pravdivý, provede se akce2 a pokračuje takto. Pokud žádný z podmíněných výrazů není pravdivý, bude provedena poslední část else.
Nyní vytvoříme vzorový vstupní soubor, který má známky studentů.
$cat student-marks Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 Edwin 2537 87 97 95 Dayan 2415 30 47
1. Awk If Příklad:Zkontrolujte, zda existují všechny značky
$ awk '{ if ($3 =="" || $4 == "" || $5 == "") print "Some score for the student",$1,"is missing";' }' student-marks Some score for the student RinRao is missing Some score for the student Dayan is missing
$3, $4 a $5 jsou výsledky testů studenta. Pokud je skóre testu rovno prázdné, vyhodí zprávu. || Operátor je zkontrolovat, zda některá ze značek neexistuje, měl by upozornit.
2. Awk If Else Příklad:Vygenerujte zprávu o úspěších/neúspěších na základě známek studentů v každém předmětu
$ awk '{ if ($3 >=35 && $4 >= 35 && $5 >= 35) print $0,"=>","Pass"; else print $0,"=>","Fail"; }' student-marks Jones 2143 78 84 77 => Pass Gondrol 2321 56 58 45 => Pass RinRao 2122 38 37 => Fail Edwin 2537 87 97 95 => Pass Dayan 2415 30 47 => Fail
Podmínkou pro úspěšné provedení je, že všechny známky testu by měly být větší nebo rovna 35. Takže všechny výsledky testu jsou zkontrolovány, pokud jsou vyšší než 35, pak vytiskne celý řádek a řetězec „Pass“, jinak tj. i když kterýkoli z skóre testu nesplňuje podmínku, vytiskne celý řádek a vypíše řetězec „Fail“.
3. Awk If Else If Příklad:Najděte průměr a známku pro každého studenta
$ cat grade.awk { total=$3+$4+$5; avg=total/3; if ( avg >= 90 ) grade="A"; else if ( avg >= 80) grade ="B"; else if (avg >= 70) grade ="C"; else grade="D"; print $0,"=>",grade; } $ awk -f grade.awk student-marks Jones 2143 78 84 77 => C Gondrol 2321 56 58 45 => D RinRao 2122 38 37 => D Edwin 2537 87 97 95 => A Dayan 2415 30 47 => D
Ve výše uvedeném skriptu awk má proměnná nazvaná „avg“ průměr ze tří skóre testu. Pokud je průměr větší nebo roven 90, pak je známka A, nebo pokud je průměr větší nebo roven 80, pak je známka B, pokud je průměr větší nebo roven 70, pak je známka C. Or. jinak je známka D.
4. Awk Ternární ( ?:) Příklad:Zřetězte každé 3 řádky vstupu čárkou.
$ awk 'ORS=NR%3?",":"\n"' student-marks Jones 2143 78 84 77,Gondrol 2321 56 58 45,RinRao 2122 38 37 Edwin 2537 87 97 95,Dayan 2415 30 47,
O vestavěné proměnné awk ORS jsme diskutovali dříve. Tato proměnná se připojí za každý řádek, který dostane výstup. V tomto příkladu se na každém 3. řádku změní z čárky na nový řádek. Pro řádky 1, 2 je to čárka, pro řádek 3 je to nový řádek, pro řádky 4, 5 je to čárka, pro řádek 6 nový řádek atd.
Doporučená četba
Sed and Awk 101 Hacks, od Rameshe Natarajan . V prostředí UNIX/Linux trávím několik hodin denně a zabývám se textovými soubory (data, konfigurační soubory a soubory protokolu). Sed a Awk používám pro všechny své práce s textem. Na základě mých zkušeností se Sed and Awk jsem napsal e-knihu Sed and Awk 101 Hacks, která obsahuje 101 praktických příkladů různých pokročilých funkcí Sed a Awk, které zlepší váš život v UNIX / Linux. I když Sed and Awk používáte několik let a nečetli jste tuto knihu, udělejte si laskavost a přečtěte si tuto knihu. Budete ohromeni možnostmi nástrojů Sed a Awk.