Pole

Pole (arrays) se v awk předem nedeklarují. Jako příklad použití pole uveďme

{ x[NR] = $0 }
Tímto programem načteme celý vstup do jednorozměrného pole a zpracujeme jej až v akci náležející speciálnímu vzorku END.

Prvky pole můžeme indexovat také nenumerickými hodnotami, např. řetězci. Ukažme si opět příklad použití


/modra/     { x["modra"]++ }
/cervena/   { x["cervena"]++ }
END         { print x["modra"], 
              x["cervena"] }

Pole v awk mohou být obecně n-rozměrná. Jejich prvky se totiž ukládají tak, jak je tomu u asociativních pamětí. S prvkem je uložen i jeho index. V případě více prvkových položek se jednotlivé indexy od sebe oddělují oddělovačem (tuto hodnotu lze změnit proměnnou SUBSEP, viz dále). Potom např.


i = "A"; j = "B"; k = "C"
x[i,j,k] = "hello, world\n"
do paměti uloží index ve tvaru A\034B\034C. V příkazu for můžeme použít zvláštní operátor in následovně:
for (proměnná in pole) ...
Operátor in v příkazu for zajistí, že proměnné se budou postupně přiřazovat všechny prvky pole. Prvky jsou přiřazovány obecně v náhodném pořadí. Pokud obsah proměnné změníme nebo pokud současně zpřístupňujeme i jiné prvky pole, nastane zřejmě chaos. Je-li pole vícerozměrné, můžeme pro uložení všech indexů (jako řetězce) použít jednu proměnnou.

Operátor in můžeme použít i v příkazech if a while ke zjištění, zda element určitého indexu se v poli nachází. Můžeme napsat

if (hodnota in pole) print pole[hodnota]
V případě vícerozměrných položek používáme zápis např.
if (("A","B","C") in x)
print x["A","B","C"]

Prvky pole rušíme příkazem delete např. následovně:

delete x["A","B","C"]


Programovací jazyk textových manipulací: awk
Příkazy pro řízení toku
Funkce