Movatterモバイル変換


[0]ホーム

URL:


Přeskočit na obsah
WikipedieWikipedie: Otevřená encyklopedie
Hledání

AWK

Z Wikipedie, otevřené encyklopedie

AWK je univerzální počítačový jazyk, navržený pro zpracovávání textových dat, ať už v podobě textových souborů nebo proudů. Název AWK je odvozen z příjmení svých tvůrců, kterými jsouAlfred V.Aho,Peter J.WeinbergerBrian 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 inspirovalyLarryho Walla k vytvoření jazykaPerl.

AWK je jedním z prvních nástrojů v UNIXu verze 7 a popularitu si získal tím, že umožnil přidat aritmetické schopnostiUNIXové rouře. AWK je standardní součástí téměř každého dnešníhooperačního systému unixového typu. Implementace AWK jsou jako instalovaný software dostupné také pro většinu dalších operačních systémů.

Struktura programů v AWK

[editovat |editovat zdroj]

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 napříkazovém řádku) obsahuje sérii příkazů, které awk říkají, jak má být vstupní soubor zpracován. Primární vstupní soubor je obvykle nějakým způsobem naformátovaný text a může jím být buď existující soubor, nebo jej AWK čte ze standardního vstupu. Typický program v AWK sestává z posloupnosti řádků ve tvaru:

/vzor/ {akce }

…kdevzor je regulární výraz a akce zastupuje příkaz(y). AWK prochází vstupní soubor. Najde-li řádek vyhovujícívzoru, provede příkaz(y) uvedené v akci. Dalšími možnostmi jsou:

BEGIN {akce }
Provede příkazyakce na začátku běhu skriptu ještě před tím, než jsou zpracována vstupní data.
END {akce }
Podobně jako v předchozím případě, aleakce se provede až na konci běhu skriptu.
/vzor/
Vypíše všechny řádky vyhovující vzoru.
{akce }
Provede akci pro každý vstupní řádek.

Každý z těchto zápisů může být v příkazovém souboru použit i víckrát. Řádky jsou v příkazovém souboru zpracovávány postupně, takže existují-li dvě konstrukce BEGIN, provede se nejprve první, poté druhá a pak se teprve provedou ostatní řádky. BEGIN a ENDnemusí být umístěny před a za ostatními řádky příkazového souboru.

Příkazy AWK

[editovat |editovat zdroj]

Příkazy AWK se umisťují namístoakce v předchozích příkladech. Příkazy AWK zahrnují volání funkcí, přiřazování do proměnných, provádění výpočtů či libovolnou kombinaci z nich. Podporuje mnoho vestavěných funkcí a mnoho dalších je k dispozici v nejrůznějších odrůdách. Některé verze AWK podporují dynamicky linkované knihovny, poskytující mnoho dalších funkcí.

Pro stručnost jsou v následujících příkladech vynechány složené závorky ({}).

Příkazprint

[editovat |editovat zdroj]

Příkaz print slouží k vypsání textu. Nejjednodušší formou příkazu je:

print

Toto zapříčiní vypsání zpracovávaného řádku. V AWK jsou řádky rozděleny na jednotlivá pole (sloupce), tyto je možno vypisovat zvlášť:

print $1
Vypíše první pole (sloupec) zpracovávaného řádku.
print $1, $3
Vypíše první a třetí sloupec zpracovávaného řádku. Jako oddělovač je použit předdefinovaný řetězec zvanýoutput field separátor (oddělovač výstupního pole) (OFS), jehož implicitní hodnotou je znak jedné mezery.

Ačkoli tato pole ($X) mohou vypadat jako proměnné (v Perlu označuje symbol $ proměnné), ve skutečnosti se odkazují na pole zpracovávaného řádku. Zvláštním případem je$0 označující celý řádek. Ve skutečnosti jsou příkazy „print“ a „print $0“ svou funkcí identické.

Příkazprint může zobrazit také výsledek výpočtů nebo volání funkce:

print 3+2print foobar(3)print foobar(proměnná)print sin(3-2)

Výstup lze přesměrovat do souboru:

print "výraz" > "název souboru"

Interní proměnné

[editovat |editovat zdroj]

AWK má interní proměnné, které mají speciální význam:

FS – Field Separator : Oddělovač polí v záznamu (Výchozí je mezera, tabulátor.)
RS – Record Separator : Oddělovač záznamů (Výchozí je znak nové řádky '\n'.)
NF – Number of Fields : Počet polí v aktuálně prováděném záznamu
NR – Number of Records : Pořadí prováděného záznamu

Proměnné atd.

[editovat |editovat zdroj]

Názvy proměnných lze sestavit ze znaků [A-Za-z0-9_] s výjimkou klíčových slov jazyka. Operátory + − * / označují (v pořadí) součet, rozdíl, součin a podíl. Pro spojování řetězců se jednoduše umístí dvě proměnné (nebo řetězcové konstanty) vedle sebe, volitelně s mezerou mezi nimi. Řetězcové konstanty jsou ohraničeny uvozovkami. Příkazy nemusí být ukončeny středníky. A konečně, komentáře lze do programu vložit pomocí znaku # na začátku řádku.

Uživatelsky definované funkce

[editovat |editovat zdroj]

Podobně jako v jazykuC je deklarace funkce složena z názvu funkce a jejích argumentů:

function pricti_tri (cislo    ,temp) {  temp = cislo + 3  return temp}

Funkci pak lze zavolat následovně:

print pricti_tri(36)     # vypise 39

Funkce může obsahovat lokální proměnné. Jejich názvy jsou pak uvedeny na konci seznamu argumentů, ačkoli jejich hodnoty by měly být při volání funkce vynechány. Konvencí je přidat před lokální proměnné nějaké bílé znaky, aby bylo zřejmé, kde končí parametry a začínají lokální proměnné.

Ukázkové programy

[editovat |editovat zdroj]

Zde je tradiční programHello world, napsaný v AWK:

BEGIN { print "Hello, world!" }

Následující program vypíše všechny řádky delší 80 znaků. Povšimněte si, že výchozí akcí je vypsání aktuálního řádku.

length > 80

Spočítání řádků, slov a znaků:

{ w += NF; c += length}END { print NR, w, c }

Součet prvního sloupce ze vstupu:

{ s += $1 }END { print s }

Četnost výskytu slov (s využitím asociativních polí):

{ for (i=1; i<=NF; i++)     words[$i]++}END { for (i in words)    print i, words[i]}

Verze a implementace AWK

[editovat |editovat zdroj]

Původní jazyk AWK vznikl v roce1977 a byl distribuován s Unixem verze 7.

V roce1985 jej začali jeho autoři rozšiřovat, nejvýznamnější změnou bylo přidání uživatelsky definovaných funkcí. Jazyk je popsán v knizeThe AWK Programming Language, vydané v roce1988 a jeho implementace byla dostupná v UNIX System V. Aby se zabránilo zmatkům s nekompatibilitou se starší verzí, byla tato verze občas označována jako „new awk“ (nová awk) nebonawk. Tato implementace byla v roce1996 uveřejněna pod licencísvobodného software a dodnes je spravována Brianem Kernighanem.

GNU awk, neboligawk, je další svobodnou implementací. Vznikl před tím, než byla svobodně dostupná originální implementace a dodnes je široce používán.

mawk je velmi rychlá implementaceMika Brennana, založená na interpretrubyte kódu.

Literatura

[editovat |editovat zdroj]

Externí odkazy

[editovat |editovat zdroj]
Příkazy a programypříkazové řádkyUnixu (více)
Správa souborů

catchattrcdchmodchownchgrpcksumcmpcpdudffilefsckfuserlnlslsattrlsofmkdirmountmvpwdrmrmdirsplittouch

Správa procesů

atchrootcrontabexitkillkillallnicepgreppidofpkillpspstreesleeptimetopwaitwatch

Správa uživatelů a prostředí

envfingeridlognamemesgpasswdsusudounameuptimewwallwhowhoamiwrite

Zpracování textu

awkcommcsplitcutdiffedexfmtheadiconvjoinlessmorepatchpastereadsedsorttactailteetruniqwcxargs

Programování vshellu

aliasbasenameechoexprfalseprintftesttrueunset

Síťová komunikace
Hledání
Ostatní

bannerbccaldateddlooklpmansizeyes

Programovací jazyky
abecední seznam programovacích jazyků
multiparadigmatické

AdaC++Common LispDF#GoOberonPerlPHPPythonRakuRubyRustScalaSwiftTcl (Tk) •Vala

strukturované (procedurální)

AWKCCOBOLDCLForthFortranLuaModula-2 /Modula-3PascalPawnPL/SQL

objektové
funkcionální
dotazovací

LINQSPARQLSQLXQueryXSL (XSLTXSL-FOXPath)

logické
výukové
ezoterické
historické

ALGOLAPLBBASICCPL (BCPL) •JMUMPSPL/ISimula 67SNOBOL

další
skriptovací/strojový kódkompilované/interpretovanéinteraktivní/dávkovéWYSIWYG
Autoritní dataEditovat na Wikidatech
Citováno z „https://cs.wikipedia.org/w/index.php?title=AWK&oldid=24847501
Kategorie:
Skryté kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp