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 awk jsme diskutovali o tisku awk, uživatelsky definovaných proměnných awk, vestavěných proměnných awk, operátorech awk a podmíněných příkazech awk.
V tomto článku se podíváme na awk loop příkazy – cykly while, do while, for , break, continue a exit příkazy spolu se 7 praktickými příklady.
Příkazy Awk looping se používají k provádění sady akcí znovu a znovu za sebou. Opakovaně provádí příkaz, dokud je podmínka pravdivá. Awk má počet cyklických příkazů jako programovací jazyk „C“.
Awk While Loop
Syntax: while(condition) actions
- while je klíčové slovo.
- podmínka je podmíněný výraz
- akce jsou tělem cyklu while, který může mít jeden nebo více příkazů. Pokud má akce více než jeden příkaz, musí být uzavřen ve složených závorkách.
Jak to funguje? — Awk while cyklus nejprve zkontroluje podmínku, pokud je podmínka pravdivá, pak provede seznam akcí. Po dokončení provedení akce se podmínka znovu zkontroluje, a pokud je pravdivá, akce se provede znovu. Tento proces se opakuje, dokud se podmínka nestane nepravdivou. Pokud podmínka vrátí hodnotu false v první iteraci, akce se nikdy neprovedou.
1. Příklad Awk While Loop:Vytvořte řetězec určité délky
$awk 'BEGIN { while (count++<50) string=string "x"; print string }' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Výše uvedený příklad používá speciální blok ‚BEGIN { }‘, který se v programu Awk spustí dříve než cokoli jiného. V tomto bloku smyčka awk while připojí znak ‚x‘ k proměnné ‚řetězec‘ 50krát. count je proměnná, která se inkrementuje a kontroluje se, že je menší než 50. Takže po 50 iteracích se tato podmínka stane nepravdivou.
Po jejím zacyklení se vytiskne proměnná ‘string’. Protože tento program Awk nemá tělo, ukončí se po provedení bloku BEGIN.
Awk Do-While Loop
Jak to funguje? – Awk Do while smyčka se nazývá výstupní řízená smyčka, zatímco smyčka awk while se nazývá vstupní řízená smyčka. Protože zatímco smyčka nejprve zkontroluje podmínku, pak se rozhodne provést tělo nebo ne. Ale awk dělat, zatímco cyklus jednou provede tělo a poté tělo opakuje, dokud je podmínka pravdivá.
Syntax: do action while(condition)
I když je podmínka nepravdivá, na začátku se akce provede alespoň jednou.
2. Awk Do While Loop Příklad:Vytiskněte zprávu alespoň jednou
$ awk 'BEGIN{ count=1; do print "This gets printed at least once"; while(count!=1) }' This gets printed at least once
Ve výše uvedeném skriptu je příkaz print proveden alespoň jednou, pokud použijete příkaz while, nejprve bude podmínka zkontrolována po inicializaci počtu na 1, při první iteraci bude podmínka nepravdivá, takže příkaz print nebude' t se provede, ale v do, zatímco první tělo bude provedeno, takže provede příkaz print.
Příkaz Awk For Loop
Awk pro příkaz je stejný jako smyčka awk while, ale jeho syntaxe je mnohem jednodušší.
Syntax: for(initialization;condition;increment/decrement) actions
Jak to funguje? — Awk pro příkaz začíná provedením inicializace, poté zkontroluje podmínku, pokud je podmínka pravdivá, provede akce, poté zvýší nebo sníží. Poté, dokud je podmínka pravdivá, opakovaně provádí akci a poté inkrementuje/snižuje.
3. Příklad Awk For Loop . Vytiskněte součet polí ve všech řádcích.
$ awk '{ for (i = 1; i <= NF; i++) total = total+$i }; END { print total }' 12 23 34 45 56 34 56 23 45 23 351
Nejprve je proměnná i inicializována na 1, poté zkontroluje, zda je i menší nebo rovno celkovému počtu polí, poté pokračuje v přidávání všech polí a nakonec se sčítání uloží do proměnné total. V bloku END stačí vytisknout proměnnou total.
4. Awk For Loop Příklad:Vytiskněte pole v opačném pořadí na každém řádku.
$ awk 'BEGIN{ORS="";}{ for (i=NF; i>0; i--) print $i," "; print "\n"; }' student-marks 77 84 78 2143 Jones 45 58 56 2321 Gondrol 37 38 2122 RinRao 95 97 87 2537 Edwin 47 30 2415 Dayan
O vestavěné proměnné awk NF jsme diskutovali v našem předchozím článku. Po zpracování každého řádku Awk nastaví proměnnou NF na počet polí nalezených na tomto řádku.
Výše uvedený skript provádí smyčky v obráceném pořadí počínaje NF po 1 a vypisuje pole jedno po druhém. Začíná polem $NF, poté $(NF-1),…, $1. Poté vytiskne znak nového řádku.
Nyní se podívejme na některé další příkazy, které lze použít s příkazem smyčkování.
Příkaz Awk Break
Příkaz Break se používá k vyskočení z nejvnitřnější smyčky (smyčka while, do-while a for), která ji uzavírá.
5. Awk Break Příklad:Awk Script projde pouze 10 iteracemi
$ awk 'BEGIN{while(1) print "forever"}'
Výše uvedená smyčka awk while vytiskne řetězec „navždy“ navždy, protože podmínka nikdy neselhává. Nyní, pokud chcete zastavit smyčku po prvních 10 iteracích, podívejte se na níže uvedený skript.
$ awk 'BEGIN{ x=1; while(1) { print "Iteration"; if ( x==10 ) break; x++; }}' Iteration Iteration Iteration Iteration Iteration Iteration Iteration Iteration Iteration Iteration
Ve výše uvedeném skriptu kontroluje hodnotu proměnné „x“, pokud dosáhne 10, vyskočí ze smyčky pomocí příkazu break.
Příkaz Awk Continue
Příkaz Continue přeskočí zbytek těla smyčky a způsobí, že další cyklus kolem smyčky začne okamžitě.
6. Awk Continue Příklad:Proveďte cyklus kromě 5. iterace
$ awk 'BEGIN{ x=1; while(x<=10) { if(x==5){ x++; continue; } print "Value of x",x;x++; } }' Value of x 1 Value of x 2 Value of x 3 Value of x 4 Value of x 6 Value of x 7 Value of x 8 Value of x 9 Value of x 10
Ve výše uvedeném skriptu vypíše hodnotu x při každé iteraci, ale pokud hodnota x dosáhne 5, pak pouze zvýší hodnotu x, pak pokračuje další iterací, nevykoná zbytek těla cyklu, takže hodnota x není vytištěna pro hodnotu 5. Příkaz Continue má význam pouze v případě, že v cyklu použijete s.
Příkaz Awk Exit
Příkaz Exit způsobí, že skript okamžitě zastaví provádění aktuálního vstupu a zastaví zpracování vstupu, veškerý zbývající vstup je ignorován.
Exit přijímá jakékoli celé číslo jako argument, který bude kódem stavu ukončení pro proces awk. Pokud není zadán žádný argument, vrátí exit stav nula.
7. Awk Příklad ukončení:Ukončení smyčky v 5. iteraci
$ awk 'BEGIN{ x=1; while(x<=10) { if(x==5){ exit;} print "Value of x",x;x++; } }' Value of x 1 Value of x 2 Value of x 3 Value of x 4
Ve výše uvedeném skriptu, jakmile hodnota x dosáhne 5, zavolá exit, což zastaví provádění procesu awk. Hodnota x se tedy tiskne pouze do 4, jakmile dosáhne 5, odejde.
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.