awk [-F
oddělovač_polí
] [
parametr
...] [
'program
' [
soubor
...]
awk [-f
soubor_s_programem
] [
soubor
...]
| -F oddělovač_polí | znak nebo regulární výraz, defnující oddělovače polí ( viz dále). Standardně jsou oddělovači polí mezera a tabulátor. | .
| ' program ' | text programu v jazyce awk; alternativně lze číst ze souboru s programem pomocí volby -f. |
| parametr | inicializuje hodnoty vnitřních proměnných awk při vyvolání ve tvaru proměnná = hodnota . |
| -f soubor_s_programem | definuje zdrojový text programu v jazyce awk jako alternativu k zápisu programu v příkazové řádce. |
| soubor | specifikuje vstupní soubory. Není-li zadán žádný soubor, pracuje se standardním vstupem. Vstupní soubory se zpracovávají v pořadí, v němž jsou uvedeny. Má-li být jedním ze vstupních souborů standardní vstup, označí se znakem '-'. Vstupní soubory jsou tvořeny záznamy oddělenými oddělovači záznamů (standardně je jím znak nová řádka). Z pohledu jazyka awk se pak záznamy skládají z polí, oddělených standardně mezerami nebo tabulátory. Jednotlivé položky se zleva značí jako $1, $2, ...a celý záznam jako $0. |
vzor
{
akce
}
vzor
{
akce
}
.
.
.
Regulární výrazy nebo relační výrazy nebo jejich kombinace spojené logickými operátory:
| == | rovná se |
| != | nerovná se |
| > | větší než |
| >= | větší nebo rovno |
| ~ | vyhovuje regulárnímu výrazu |
| !~ | nevyhovuje regulárnímu výrazu |
| BEGIN | definuje akci, která se vykoná pouze jednou před začátkem zpracování (např. inicializace vnitřních proměnných, tisk hlavičky a pod.) |
| END | definuje akce, které je třeba vykonat po ukončení zpracování vstupních souborů ( např. tisk konce dokumentu, statistiky z celého souboru a jiných celkových výsledků výpočtů v nichž figurují data z více záznamů). |
BEGIN i END mohou být několikrát na libovolných místech, vykonávají před začátkem resp. po ukončení zpracování vstupních souiborů v pořadí zápisu těchto vzorů v textu programu.
Každá věta souboru zamestnanci.plat obsahuje:
Chceme vytisknout:
pro všechny zaměstnance z tohoto souboru a na konec tiskové sestavy přidat data pro příležitostné pracovníky, nezapsané v souboru zamestnanci.plat. Jejich data zadáme tedy za standardního vstupu ( klávesnice) ve stejném formátu jako má soubor zamestnanci.plat:
awk '{print $1, $2, $3*(1 + $4/100)}' zamestnanci.plat - | lp
Předcházející příklad chceme doplnit o tisk hlavičky na začátku a o tisk oddělovací čáry na konci výstupu:
awk '
BEGIN {print " HRUBÝ PLAT ZAMĚSTNANCŮ"}
END print {"------------------------------- "}
{print $1, $2, $3*(1 + $4/100)}' zamestnanci.plat - | lp
| Identifikátor | Význam |
|---|---|
| $0 | celý aktuální záznam. |
| $1, $2,... | prvé a další pole aktuálního záznamu. Pole, která neexistují ve vstupním záznamu, tedy $(NF+1) a další obsahují prázdný řetězec. V programu jim lze přiřadit libovolnou hodnotu. Počet položek (NF) může být maximálně 100. |
| ARGC | počet argumentů příkazu awk , konkrétně počet vstupních souborů. |
| ARGV | pole argumentů povelové řádky při vyvolání o rozměru ARGC-1. |
| ARGV[0] | řetězec 'awk', resp. 'nawk', název interpretu jazyka. |
| ARGV[1] další | názvy vstupních souborů. |
| FILENAME | název aktuálně zpracovávaného souboru. |
| FNR | pořadové číslo aktuálního záznamu v aktuálním souboru. |
| FS | oddělovač položek záznamu, standardně nastaven na mezeru a tabulátor. Podle potřeby lze změnit. přiřazením nebo volbou -F. K definici nového oddělovače lze použít regulární výraz. |
| NF | počet polí aktuálního záznamu. |
| NR | číslo aktuálního záznamu. |
| RS | oddělovač záznamů; standardně nová řádka. Lze změnit přiřazením. |
| OFMT | výstupní formát pro tisk čísel, standardně %.g - tj. semilogaritmický tvar s šestimístnou mantisou |
| OFS | oddělovač položek pro výstup, standardně mezera. |
| ORS | oddělovač záznamů na výstupu, standardně nová řádka. |
| RSTART | index prvého znaku řetězce, nalezeného funkcí match. |
| LSTART | délka řetězce, nalezeného funkcí match. |
| SUBSEP | oddělovač indexů v poli, standardně \34. |
Rozdělení řetězece se seznam dní v týdnu, oddělených čárkami do prvků pole:
pocet = split("Po,Út,St,Čt,Pá,So,Ne",dny_v_tydnu,",").
Potom bude tedy v dny_v_tydnu[1] uloženo "Po", v dny_v_tydnu[2] "Út" atd. a proměnná pocet bude mít hodnotu 5.
| +, -, *, / | s obvyklým významem, |
| ++ | inkrementace o hodnotu 1 |
| --  | ;dekrementace o hodnotu 1 |
| % | pro zbytek po celočíselném dělení | ^ nebo ** | mocnění. |
Priority operátorů a používání závorek je stejné jako v C.
| atan2(y,x) | arkustangens y/x, argument v radiánech | |
| cos(x) | cosinus, argument v radiánech | |
| exp(x) | exponenciální funkce | |
| int(x) | celá část | |
| log(x) | přirozený logaritmus | |
| rand() | náhodné číslo v intervalu (0,1) | |
| sin(x) | sinus, argument v radiánech | |
| sqrt(x) | druhá odmocnina | |
| srand(x) | nastaví semeno (počáteční hodnotu z níž se generují náhodná čísla) pro funkci rand(). Bez argumentu srand() bere jako semeno aktuální čas. |
s1 = "Podvodnice "; s2 = "Chadimová před soudem"; s = s1 s2;
Proměnná s bude mít po této sekvenci příkazů hodnotu "Podvodnice Chadimová před soudem".
Pro manipulaci s řetězci je zabudován rozsáhlý sortiment funkcí.