Archiv rubriky „Awk a sed“
Jemný úvod do základní syntaxe jazyka Awk - 1
V minulém článku o jazyku Awk jsme se seznámili se základními pojmy. Než však budeme plnohodnotně programovat musíme se seznámit se základními stavebními prvky jazyka Awk.
Program jAwk se skládá z jednotlivých bloků, obecně bych je označil zhruba takto:
vzorek {akce}
vzorek {akce}
Data v Awk jsou nejčastěji načítána buď ze standardního vstupu nebo vstupního souboru. Data čte Awk řádek po řádku a kontroluje, jestli daný řádek vyhovuje vzorku. Pokud je nalezena shoda, provede se příslušná akce, kterou jsme si nadefinovali. Poté jsou prověřovány další řádky a tak stále dokola až Awk dojde na konec souboru.
Řádky obsahující slova BEGIN a END se neporovnávají, protože se jedná o slova se speciálním významem. O těchto slovech si povíme později.
V části akce {akce} můžeme samozřejmě uvést jednotlivé příkazy, a to z obecného hlediska takto:
{prikaz1
prikaz2
}
Jednotlivé příkazy můžeme uvádět na jednu řádku, ale v tomto případě je musíme oddělit středníkem. Středník také můžeme dát na konec každého příkazu. První závorka musí být uvedena na řádku kde je daný vzorek.
Komentáře se vytváří znakem # například: # ja jsem komentar
Rozlišuje se celkem 6 druhů vzorků:
BEGIN{příkaz}
příkazy jsou vykonány před zpracováním prvního řádku vstupních dat, tyto příkazy jsou vykonány pouze jednou.
END{příkaz}
příkazy jsou vykonány po zpracování prvního řádku vstupních dat, tyto příkazy jsou vykonány pouze jednou.
výraz{příkaz}
příkazy jsou vykonány pro každý řádek, je-li výraz PRAVDA
/regulární výraz/{příkaz}
příkazy jsou vykonány pro každý řádek,odpovídá-li regulárnímu výrazu
složený vzorek{příkaz}
výraz můžeme spojovat pomocí operátorů, které určitě každý programátor dobře zná:
&& (logické AND)
|| (logické OR)
! negace
Příkazy jsou vykonány tehdy, odpovídají-li výše uvedeným operátorům.
vzorek1,vzorek2{příkaz}
Tímto definujeme oblast začínající prvním řádkem, pro který platí vzorek1 a končící posledním řádkem označující vzorek2.
BEGIN a END nemůžeme kombinovat s jinými vzorky. Vzorek BEGIN nemusí být nutně uveden na začátku programu.
29. 7. 2009 | gisat_cz | 0
Úvodem o programovacím jazyku Awk
Awk je univerzálním jyzykem, pomocí kterého můžeme zpracovávat textová data. Název AWK je odvozen z příjmení svých tvůrců, kterými jsou Alfred V. Aho, Peter J. Weinberger a Brian W. Kernighan.
AWK je příkladem jazyka, který značně využívá řetězcové datové typy, asociativní pole (tj. pole indexovaná řetězcovými klíči) a regulární výrazy. Síla, stručnost a omezení programů v AWK a skriptů v sedu inspirovaly Larryho Walla k vytvoření jazyka Perl.
Awk je velmi účinným prostředkem využívaným v operačních syst=mech na bázi UNIXu. Implementace AWK jsou jako instalovaný software dostupné také pro většinu dalších operačních systémů.
HISTORIE JAZYKA AWK:
První verze jazyka Awk vznikla v roce 1977, dnes se však používá pozdější verze vydaná v roce 1985. Díky těmto rozdílnýmm verzím Awk dochází ke konfliktu v názvech interpreta tohoto jazyka. Ve starších Unixech se stystémem System V se o Awk stará interpret nazvaný awk v novějších verzích je to nawk, s přechodem Unixu na verzi 3.1 můžeme hovořit o oawk
CÍL AWK:
hlavním cílem tohoto jazyka je usnadnit práci pri analýze, manipulaci a práci s daty.
Základní vlastností awk je zpracovávání textových dat. Můžeme jím zkoumat jestli daný text splňuje nebo nesplňuje podmínky, které jsme v awk zadali. Syntaxe jazyka awk je podobná syntaxi jazyka C.
POUŽITÍ JAZYKA:
Obecně vzato jsou programu awk předány dva druhy dat: příkazový soubor a primární vstupní soubor. Příkazový soubor (kterým může být buď skutečný soubor, nebo jej lze zadat přímo na příkazovém řádku) obsahuje sérii příkazů, které awk říkají, jak má být vstupní soubor zpracován.
Použití je velmi jednoduché, tedy pokud budeme potřebovat zpracovávat velká a objemná data, roztřiďovat je. Použití awk v těchto případech je velmi vítaným prostředkem. i přes své stáří je awk jedinečným nástrojem každého unixového programátora.
V dalších povídáních o awk se položíme do detailů o tomto jazyku.
28. 7. 2009 | gisat_cz | 2


