A.W.K. | |
---|---|
Jazyková třída | skriptované , procedurální , řízené daty |
Objevil se v | 1977 |
Autor | Alfred Aho , Peter Weinberger a Brian Kernighan |
Vývojář | Alfred Aho , Brian Kernigan a Peter Weinberger [d] |
Uvolnění | POSIX.1-2017 |
Typový systém | Ne |
Hlavní implementace | awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (překladač), Awka (překladač) |
Dialekty | starý awk oawk 1977, nový awk nawk 1985, GNU Awk gawk |
Byl ovlivněn | C , SNOBOL 4, Bourne shell |
ovlivnil | Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua |
Mediální soubory na Wikimedia Commons |
AWK je skriptovací jazyk podobný C pro řádkovou analýzu a zpracování vstupního toku (například textového souboru) podle daných vzorů ( regulární výrazy ). Lze použít ve skriptech příkazového řádku .
Název AWK je složen z prvních písmen jmen vývojářů jazyka - Aho , Weinberger ( angl. Peter J. Weinberger ) a Kernighan . První verze byla napsána v roce 1977 v AT&T Bell Laboratories .
AWK zachází se vstupním tokem jako se seznamem položek. Každý záznam je rozdělen do polí. Na základě těchto informací se provede nějaký algoritmus zpracování definovaný programátorem. Ve výchozím nastavení je oddělovačem záznamů znak nového řádku (to znamená, že záznamy jsou stejné jako řádky), oddělovačem polí je mezera nebo tabulátor nebo sekvence takových znaků. Oddělovací znaky lze v programu explicitně definovat. Znak oddělovače polí lze také zadat na příkazovém řádku.
Program AWK se skládá z příkazů (pravidel), které vypadají takto:
šablona { akce } šablona { akce } ...Každý záznam je postupně porovnáván se všemi vzory a pokaždé, když odpovídá vzoru, je provedena zadaná akce. Pokud šablona není zadána, akce se provede pro libovolnou položku. Není-li zadána žádná akce , zobrazí se záznam. AWK má také 2 předdefinované šablony BEGIN a END . BEGIN se provede před zpracováním vstupního toku. KONEC - po zpracování posledního záznamu vstupního toku.
Akce se může skládat ze sekvence příkazů oddělených středníkem, novým řádkem nebo závorkou.
Cyklus for ve formě orientované na zpracování indexových polí vypadá takto:
for ( inicializační sekce ; sekce podmínky ; sekce aktualizace iterátoru ) { Tělo smyčky } for (asociativní forma)Smyčka for ve formě orientované na zpracování asociativních polí vypadá takto:
for ( iterátor v poli ){ tělo smyčky }Variabilní | Obsah | Výchozí hodnota |
---|---|---|
ARGC | Počet argumentů příkazového řádku | - |
ARGV | Pole argumentů příkazového řádku | - |
ŽIVOTNÍ PROSTŘEDÍ | Pole obsahující proměnné prostředí | - |
NÁZEV SOUBORU | Zpracovaný vstupní soubor | - |
FNR | Číslo záznamu v aktuálním souboru | - |
FS | Zaznamenejte oddělovač polí na vstupu | mezery a/nebo tabulátory |
NF | Počet polí v aktuálním záznamu | - |
NR | Číslo záznamu (celkový počet přečtených záznamů) | - |
OFMT | Formát tisku čísel | %.6g |
OFS | Oddělovač pole výstupního záznamu (znak) | mezery a/nebo tabulátory |
ORS | Oddělovač záznamu ve výstupu programu AWK (znak) | \0 |
RS | Vstupní oddělovač záznamu (znak) | \0 |
RSTART | Pozice začátku podřetězce nalezená funkcímatch | - |
DÉLKA | Délka podřetězce nalezená funkcímatch | - |
SUBSEP | Oddělovač indexu ve vícerozměrných polích | \034 |
Ahoj světe! »
ZAČÁTEK { tisk "Ahoj světe!" ; odejít }Tisk délky nejdelšího řádku:
{ if ( délka ( $ 0 ) > max ) max = délka ( $ 0 ) } KONEC { tisk max }Vytiskněte všechny řádky delší než 80 znaků:
{ if ( délka ( $ 0 ) > 80 ) tisk $ 0 }Vytiskněte všechny řádky, které mají alespoň jedno pole:
NF > 0Tisk počtu řádků v souboru:
KONEC { tisknout NR }Tisk řádků, jejichž čísla jsou násobky 3:
{ if ( FNR % 3 == 0 ) tisk $ 0 }Vytiskněte zbytek vstupního řádku po prvních třech polích:
{ # najít začátek 4. pole... shoda ( $ 0 , /[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]* [ \t]*/ ) # ...vytiskne zbytek vstupního řetězce z nalezené pozice print substr ( $ 0 , 1 + RLENGTH ) }Programovací jazyky | |
---|---|
|