Naučte sa Linux Command - gawk

názov

gawk - skenovanie a spracovanie jazyka

synopse

gawk [Možnosti štýlu POSIX alebo GNU] -f súbor súboru [ - ] súboru ...
gawk [Možnosti štýlu POSIX alebo GNU] [ - ] programový textový súbor ...

pgawk [Možnosti štýlu POSIX alebo GNU] -f súbory programových súborov [ - ] ...
pgawk [Možnosti štýlu POSIX alebo GNU] [ - ] programový textový súbor ...

popis

Gawk je implementácia programovacieho jazyka AWK projektom GNU . Je v súlade s definíciou jazyka v štandarde POSIX 1003.2 Command Language and Utilities. Táto verzia je založená na opise AWK Programming Language od Aho, Kernighan a Weinberger s ďalšími funkciami, ktoré sa nachádzajú vo verzii UNIX awk System V Release 4. Gawk tiež poskytuje novšie rozšírenia Bell Laboratories awk a niekoľko rozšírení špecifických pre GNU.

Pgawk je profilová verzia gawk . Je to rovnaké v každom prípade gawk , s výnimkou toho, že programy bežia pomalšie a automaticky vytvorí v súbore awkprof.out spustený profil vykonávania. Pozrite si nižšie uvedenú možnosť - profil .

Príkazový riadok pozostáva z možností, ktoré sa týkajú samotného textu, textu programu AWK (ak nie sú dodávané cez voľby -f alebo -file ) a hodnôt, ktoré sa majú sprístupniť v preddefinovaných premenných AWK ARGC a ARGV .

Formát doplnkov

Možnosti Gawk môžu byť buď tradičné jednostranné možnosti POSIX, alebo dlhé možnosti štýlu GNU. Možnosti POSIX začínajú jediným `` - '', zatiaľ čo dlhé možnosti začínajú `` - ''. Dlhé možnosti sa poskytujú pre funkcie špecifické pre GNU aj pre funkcie s mandátom POSIX.

Podľa štandardov POSIX sú špecifické možnosti gawk dodávané pomocou argumentov pre voľbu -W . Môžu byť dodané viacero funkcií typu W. Každá voľba -W má príslušnú dlhú voľbu, ako je uvedené nižšie. Argumenty k dlhým možnostiam sa buď spájajú s možnosťou znakom = = bez intervenčných medzery, alebo môžu byť poskytnuté v ďalšom argumentu príkazového riadku. Dlhé možnosti môžu byť skrátené, pokiaľ skratka zostáva jedinečná.

možnosti

Spoločnosť Gawk prijíma nasledujúce možnosti uvedené v abecednom poradí.

-F fs

- separátor poľa fs Použite fs pre separátor vstupného poľa (hodnota preddefinovanej premennej FS ).

-v var = val

--assign var = val Priraďte hodnotu val pre premennú var pred spustením programu. Takéto premenné hodnoty sú k dispozícii pre blok BEGIN programu AWK.

-f programový súbor

- súbor súborov súborov Prečítajte si zdroj programu AWK zo súborového programového súboru namiesto prvého argumentu príkazového riadku. Môžu sa použiť viaceré možnosti -f (alebo --file ).

-mf NNN

-m NNN Nastavte rôzne hodnoty pamäte na hodnotu NNN . Príznak f nastaví maximálny počet polí a príznak r nastaví maximálnu veľkosť záznamu. Tieto dve príznaky a voľba -m sú z verzie Bell Laboratories UNIX awk . Oni sú ignorovaní gawk , pretože gawk nemá žiadne vopred definované limity.

-W compat

-W tradičné

--compat

- tradičný Spustiť v režime kompatibility . V režime kompatibility sa gawk správa rovnako ako UNIX awk ; žiadne rozšírenia špecifické pre GNU nie sú rozpoznané. Použitie - tradičnej je uprednostňované pred ostatnými formami tejto možnosti. Viac informácií nájdete v časti GNU EXTENSIONS .

-W copyleft

-W autorské práva

--copyleft

--copyright Vytlačte krátku verziu správy o autorských právach GNU na štandardný výstup a úspešne ukončite.

-W výpisu premenných [ = súbor ]

--dump-variables [ = file ] Vytlačte zoradený zoznam globálnych premenných, ich typov a konečných hodnôt do súboru . Ak nie je poskytnutý žiadny súbor , gawk používa v aktuálnom adresári súbor s názvom awkvars.out .

Zoznam všetkých globálnych premenných je dobrý spôsob hľadania typografických chýb vo vašich programoch. Túto možnosť by ste použili aj vtedy, ak máte rozsiahly program s množstvom funkcií a chcete mať istotu, že vaše funkcie neúmyselne nepoužívajú globálne premenné, ktoré by ste chceli byť lokálne. (To je obzvlášť ľahko urobiť s jednoduchými názvami premenných, ako je i , j a tak ďalej.)

-W pomoc

-W využitie

--Pomoc

-usage Vytlačte relatívne krátky súhrn dostupných možností na štandardnom výstupe. (Podľa štandardov kódovania GNU tieto možnosti spôsobujú okamžitý a úspešný odchod.)

-W nečistoty [ = fatálne ]

--lint [ = fatal ] Poskytnite upozornenia na konštrukty, ktoré sú pochybné alebo neprenosné pre iné implementácieAWK. S voliteľným argumentom smrteľných upozornení na vlákna sa stali fatálne chyby. To môže byť drastické, ale jeho použitie určite povzbudí vývoj čistších programov AWK.

-W starý

--lint-old Poskytnite varovania o konštrukciách, ktoré nie sú prenosné na pôvodnú verziu systému Unix awk .

-W gen-po

--gen-po Skenovanie a analýza programu AWK a generovanie súboru formátu GNU .po na štandardnom výstupe so záznamami pre všetky lokalizovateľné reťazce v programe. Samotný program sa nevykoná. Viac informácií o súboroch .po nájdete v distribúcii GNU gettext .

-W bez desatinných údajov

- non-decimal-data Rozpoznáva octové a hexadecimálne hodnoty vo vstupných údajoch. Túto možnosť používajte veľmi opatrne!

-W posix

--posix Táto funkcia zapína režim kompatibility s nasledujúcimi ďalšími obmedzeniami:

*

\ x sekvencie escape nie sú rozpoznané.

*

Iba medzera a tabuľka pôsobia ako oddeľovače poľa, keď je FS nastavené na jeden priestor, nový riadok nie je.

*

Nemôžete pokračovať po riadkoch ? a :.

*

Funkcia synonymov pre funkciu kľúčového slova sa nerozpozná.

*

Operátory ** a ** = nemôžu byť použité namiesto ^ a ^ = .

*

Funkcia fflush () nie je k dispozícii.

-W profil [ = prof_file ]

--profile [ = prof_file ] Odošlite profilovacie údaje do prof_file . Predvolená hodnota je awkprof.out . Keď beží s gawk , profil je len "pekne tlačená" verzia programu. Pri spustení s pgawk obsahuje profil počet vykonaní každého príkazu v programe v ľavom okraji a počet funkčných volaní pre každú funkciu definovanú užívateľom.

-W re-interval

- re-interval Povoliť používanie intervalových výrazov v zhode s regulárnym výrazom (pozrite nižšie Pravidelné výrazy ). Intervalové výrazy neboli tradične dostupné v jazyku AWK. Norma POSIX ich pridala, aby sa awk a egrep navzájom zhodovali. Avšak ich používanie pravdepodobne preruší staré programy AWK, takže gawk ich poskytuje iba vtedy, ak sú s touto možnosťou požiadané, alebo keď je špecifikované --posix .

-W zdrojový programový text

- source program-text Použite programový text ako zdrojový kód programu AWK. Táto možnosť umožňuje jednoduché premiešanie funkcií knižnice (používa sa cez voľby -f a -file ) so zdrojovým kódom zadaným na príkazovom riadku. Je určený predovšetkým pre stredné až veľké programy AWK, ktoré sa používajú v shellových skriptoch.

-W verzia

--version Tlačte informácie o verzii pre túto konkrétnu kópiu gawk na štandardný výstup. To je užitočné hlavne na to, aby ste vedeli, či je súčasná kópia gawk vo vašom systéme aktuálna vzhľadom na to, čo distribuuje Free Foundation Foundation. To je tiež užitočné pri hlásení chýb. (Podľa štandardov kódovania GNU tieto možnosti spôsobujú okamžitý a úspešný odchod.)

- Označte koniec možností. To je užitočné, aby sa umožnilo ďalšie argumenty samotného programu AWK, aby sa začalo s "-". Toto je hlavne pre konzistenciu s konvenciou parsovania argumentov používanou vo väčšine ostatných programov POSIX.

V režime kompatibility sú všetky ďalšie možnosti označené ako neplatné, inak sa ignorujú. Pri bežnej prevádzke, pokiaľ je dodaný programový text, sa neznáme možnosti prenášajú do programu AWK v poli ARGV na spracovanie. To je obzvlášť užitočné pre spustenie programov AWK pomocou mechanizmu interpretátora "!!".

VÝKON PROGRAMU AWK

Program AWK pozostáva zo sekvencie vyhlásení vzoru a voliteľných funkčných definícií.

vzor { akčné vyhlásenia }

názov funkcie ( zoznam parametrov ) { statements }

Gawk najprv prečíta zdroj programu z programových súborov ( súborov ), ak sú zadané, z argumentov do - zdrojov alebo z prvého argumentu bez možnosti na príkazovom riadku. Možnosti -f a -source sa môžu na príkazovom riadku použiť viacnásobne. Gawk číta programový text, akoby boli všetky texty zdrojových súborov a príkazového riadku spojené. To je užitočné pre vytváranie knižníc funkcií AWK bez toho, aby bolo potrebné ich zahrnúť do každého nového programu AWK, ktorý ich používa. Poskytuje tiež možnosť zmiešať funkcie knižnice s programami príkazového riadku.

Premenná prostredia AWKPATH určuje cestu vyhľadávania, ktorá sa použije pri hľadaní zdrojových súborov s názvom voľba -f . Ak táto premenná neexistuje, predvolená cesta je ".: / Usr / local / share / awk" . (Aktuálny adresár sa môže líšiť v závislosti od toho, ako bol gawk vytvorený a nainštalovaný.) Ak názov súboru zadaný voľbe -f obsahuje znak "` / '', nevykoná sa žiadne vyhľadávanie cesty.

Gawk spúšťa programy AWK v nasledujúcom poradí. Najprv sa vykonajú všetky priradenia premenných špecifikované pomocou možnosti -v . Ďalej gawk zostaví program do interného formulára. Potom gawk vykoná kód v blokoch BEGIN (ak existuje) a potom pokračuje čítať každý súbor s názvom v poli ARGV . Ak na príkazovom riadku nie sú žiadne súbory, gawk číta štandardný vstup.

Ak názov súboru na príkazovom riadku má tvar var = val, považuje sa to za priradenie premennej. Premennej var bude priradená hodnota val . (To sa stane po spustení všetkých blokov BEGIN .) Priradenie príkazového riadku príkazového riadka je najužitočnejšie na dynamické priradenie hodnôt premenným, ktoré AWK používa na kontrolu toho, ako je vstup rozdelený na polia a záznamy. To je tiež užitočné pre riadenie stavu, ak sú potrebné viacnásobné prechody cez jeden dátový súbor.

Ak je hodnota konkrétneho prvku ARGV prázdna ( "" ), preskočí nad ním.

Pri každom zázname na vstupe sa testuje, či sa zhoduje s akýmkoľvek vzorom v programe AWK. Pre každý vzor, ​​ktorý sa záznam zhoduje, sa vykoná príslušná akcia . Vzory sa testujú v poradí, v akom sa vyskytujú v programe.

Napokon, po úplnom vyčerpaní vstupu, gawk vykoná kód v blokoch END (ak existujú).

Premenné, záznamy a polia

AWK premenné sú dynamické; vznikajú pri ich prvom použití. Ich hodnoty sú buď čísla s pohyblivou čiarkou alebo reťazce, alebo obidva v závislosti od toho, ako sa používajú. AWK má tiež jednorozmerné polia; môžu byť simulované polia s viacerými rozmermi. Niekoľko preddefinovaných premenných sa nastavuje ako programový chod; tieto budú opísané podľa potreby a zhrnuté nižšie.

záznamy

Zvyčajne sú záznamy oddelené novými znakmi. Môžete určiť, ako sa záznamy oddelia priradením hodnôt k zabudovanej premennej RS . Ak je RS ľubovoľný znak, tento znak oddeľuje záznamy. V opačnom prípade RS je regulárny výraz. Text na vstupe, ktorý zodpovedá tomuto regulárnemu výrazu, oddeľuje záznam. V režime kompatibility sa však na oddelenie záznamov používa iba prvý znak jeho reťazca. Ak je RS nastavené na nulový reťazec, záznamy sú oddelené prázdnymi riadkami. Keď je parameter RS nastavený na nulový reťazec, znak novej línie vždy pôsobí ako oddeľovač polí, okrem toho, akákoľvek hodnota FS môže mať.

Fields

Pri čítaní každého vstupného záznamu sa gawk rozdelí záznam na polia s použitím hodnoty premennej FS ako oddeľovača polí. Ak je FS jeden znak, polia sú oddelené týmto znakom. Ak je FS nulový reťazec, každý jednotlivý znak sa stáva samostatným poľom. V opačnom prípade sa očakáva, že FS bude úplný regulárny výraz. Vo zvláštnom prípade, že FS je jediný priestor, polia sú oddelené behmi medzier a / alebo tabuliek a / alebo nových riadkov. (Ale pozri diskusiu o - posix , nižšie). POZNÁMKA: Hodnota IGNORECASE (pozri nižšie) ovplyvňuje aj rozdelenie polí, keď je FS regulárny výraz a ako sú záznamy oddelené, keď je RS regulárny výraz.

Ak je premenná FIELDWIDTHS nastavená na zoznam čísel oddelených od medzery, očakáva sa, že každé pole bude mať pevnú šírku a gawk rozdelí záznam pomocou špecifikovaných šírok. Hodnota FS sa ignoruje. Priradenie novej hodnoty FS prekoná použitie FIELDWIDTHS a obnoví predvolené správanie.

Každé pole vo vstupnom záznamu sa môže odvolávať na jeho pozíciu, $ 1 , $ 2 atď. $ 0 je celý záznam. Do polí nie je potrebné odkazovať na konštanty:

n = 5
vytlačiť $ n

vytlačí piate pole vo vstupnom zápise.

Premenná NF je nastavená na celkový počet polí vo vstupnom záznamu.

Odkazy na neexistujúce polia (tj polia po $ NF ) vytvárajú nulový reťazec. Avšak priradenie do neexistujúceho poľa (napr. $ (NF + 2) = 5 ) zvyšuje hodnotu NF , vytvára ľubovoľné zasahujúce polia s nulovým reťazcom ako ich hodnotu a spôsobí prepočítanie hodnoty $ 0 s pričom polia sú oddelené hodnotou OFS . Odkazy na negatívne číslované polia spôsobujú fatálnu chybu. Zníženie NF spôsobí stratu hodnôt polí za novú hodnotu a hodnotu $ 0, ktorá sa má prepočítať, pričom polia sú oddelené hodnotou OFS .

Priradenie hodnoty existujúcemu poli spôsobí, že celý záznam sa prestaví, keď sa odkazuje na hodnotu $ 0 . Podobne priradenie hodnoty k hodnote $ 0 spôsobí, že záznam sa má zmeniť, čím sa vytvoria nové hodnoty pre polia.

Zabudované premenné

Gawk vstavané premenné sú:

argc

Počet argumentov príkazového riadku (nezahŕňa možnosti gawk alebo zdroj programu).

ARGIND

Index ARGV aktuálneho súboru, ktorý sa spracováva.

argv

Pole argumentov príkazového riadku. Pole je indexované od 0 do ARGC - 1. Dynamická zmena obsahu ARGV môže riadiť súbory použité pre dáta.

BINMODE

Na systémoch, ktoré nie sú POSIX, určuje použitie "binárneho" režimu pre všetky súbory I / O. Číselné hodnoty 1, 2 alebo 3 určujú, že vstupné súbory, výstupné súbory alebo všetky súbory by mali používať binárne I / O. Hodnoty reťazca "r" alebo "w" špecifikujú, že vstupné súbory alebo výstupné súbory by mali používať binárne vstupy / výstupy. Hodnoty reťazca "rw" alebo "wr" určujú, že všetky súbory by mali používať binárne I / O. Akákoľvek iná hodnota reťazca sa považuje za "rw" , ale generuje varovnú správu.

CONVFMT

Formát konverzie pre čísla, "% .6g" , štandardne.

ENVIRON

Pole obsahujúce hodnoty aktuálneho prostredia. Pole je indexované premennými prostredia, pričom každý prvok je hodnotou premennej (napr. ENVIRON ["HOME"] môže byť / home / arnold ). Zmena tohto poľa neovplyvňuje životné prostredie videné v programoch, ktoré sa vyhadzujú prostredníctvom presmerovania alebo funkcie system () .

errno

Ak sa vyskytne systémová chyba buď vykonaním presmerovania pre getline , počas čítania pre getline alebo počas zavretia () , potom ERRNO bude obsahovať reťazec popisujúci chybu. Hodnota je predmetom prekladu v neanglických lokalizáciách.

FIELDWIDTHS

Zoznam šírky poľa oddelený bielym priestorom. Keď je nastavený, gawk analyzuje vstup do polí s pevnou šírkou, namiesto použitia hodnoty premennej FS ako oddeľovača polí.

NÁZOV SÚBORU

Názov aktuálneho vstupného súboru. Ak na príkazovom riadku nie sú zadané žiadne súbory, hodnota FILENAME je `` - ''. Funkcia FILENAME však nie je definovaná v rámci bloku BEGIN (pokiaľ nie je nastavená metódou getline ).

FNR

Vstupné číslo záznamu v aktuálnom vstupnom súbore.

FS

Oddeľovač vstupných polí, štandardne medzera. Pozri pole vyššie.

ignoreCase

Ovládanie citlivosti na všetky veľkosti písmen a operácií s reťazcami. Ak má IGNORECASE nenulovú hodnotu, porovnávanie reťazcov a porovnanie vzorov v pravidlách, rozdelenie poľa s FS , oddelenie záznamov pomocou RS , vyrovnanie regulárneho výrazu s ~ a ! ~ A gensub () , gsub () , index () , match () , split () a sub () vstavané funkcie ignorujú všetky prípady pri operáciách regulárneho výrazu. POZNÁMKA: Inšpirácia poľa nie je ovplyvnená ani funkcia asort () .

Ak sa teda IGNORECASE nerovná nuly, / aB / sa zhoduje so všetkými reťazcami "ab" , "aB" , "Ab" a "AB" . Rovnako ako u všetkých premenných AWK, počiatočná hodnota IGNORECASE je nula, takže všetky regulárne výrazy a reťazcové operácie sú zvyčajne malé a veľké písmená. Pod Unixom sa pri ignorovaní prípadu používa celá znaková sada ISO 8859-1 Latin-1.

Lint

Poskytuje dynamické ovládanie možnosti --lint v rámci programu AWK. Keď je pravda, gawk vytlačí upozornenia na vlákna. Keď je to falošné, nie. Keď sa priradí hodnota reťazca "smrteľná" , upozornenia na vlákna sa stanú smrteľnými chybami, presne ako - lint = fatálne . Akákoľvek iná skutočná hodnota iba vytlačí varovania.

NF

Počet polí v aktuálnom vstupnom zápise.

NR

Celkový počet zaznamenaných vstupných záznamov.

OFMT

Výstupný formát pre čísla, "% .6g" , štandardne.

OFZ

Oddeľovač výstupného poľa, štandardne medzera.

ORS

Výstupný záznamový oddeľovač, štandardne nový riadok.

procinfo

Prvky tohto poľa poskytujú prístup k informáciám o bežiacom programe AWK. Na niektorých systémoch môžu byť prvky v poli "group1" cez "group n " pre niektoré n , čo je počet doplnkových skupín, ktoré proces má. Použite operátora na testovanie týchto prvkov. Sú k dispozícii nasledujúce prvky:

Procinfo [ "egida"]

hodnota getegidného (2) systémového volania.

Procinfo [ "euid"]

hodnota systému hovoru geteuid (2).

Procinfo [ "FS"]

"FS", ak je rozdelenie poľa s FS platné, alebo "FIELDWIDTHS", ak je rozdelenie poľa s FIELDWIDTHS platné.

Procinfo [ "GID"]

hodnota systému call getgid (2).

Procinfo [ "pgrpid"]

ID skupiny procesov aktuálneho procesu.

Procinfo [ "pid"]

ID procesu aktuálneho procesu.

Procinfo [ "ppid"]

ID rodičovského procesu aktuálneho procesu.

Procinfo [ "uid"]

hodnota systému call getuid (2).

RS

Oddeľovač vstupných záznamov je štandardne nový riadok.

RT

Terminátor záznamu. Gawk nastaví RT na vstupný text, ktorý zodpovedá znaku alebo regulárnemu výrazu špecifikovanému RS .

rstart

Index prvého znaku zodpovedá zhoda () ; 0, ak nie je zhoda. (Znamená to, že indexy znakov začínajú na jednom.)

RLENGTH

Dĺžka reťazca zodpovedajúca zhoda () ; -1 ak nie je zhoda.

SUBSEP

Znak použitý na oddelenie viacerých indexov v prvkoch poľa, štandardne "\ 034" .

TEXTOVÁDOMÉNA

Textová doména programu AWK; slúži na vyhľadanie lokalizovaných prekladov pre reťazce programu.

poľa

Polia sú zaregistrované s výrazom medzi hranatými zátvorkami ( [ a ] ). Ak je výrazom zoznam výrazov ( expr , expr ...), indexový poinok je reťazec pozostávajúci z zreťazenia ( reťazecovej ) hodnoty každého výrazu, oddelené hodnotou premennej SUBSEP . Toto zariadenie sa používa na simuláciu viacnásobne dimenzovaných polí. Napríklad:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "Ahoj, svet \ n"

priradí reťazec "ahoj, svet \ n" elementu poľa x, ktorý je indexovaný reťazcom "A \ 034B \ 034C" . Všetky súbory v AWK sú asociatívne, tj indexované reťazcovými hodnotami.

Špeciálny operátor môže byť použitý v vyhlásení if alebo while, aby zistil, či pole má index pozostávajúci z konkrétnej hodnoty.

ak (val v mape) pole pre tlač [val]

Ak pole má viacero indexov, použite (i, j) v poli .

Konštrukt v konštrukcii môže byť tiež použitý v slučke for pre iterovanie nad všetkými prvkami poľa.

Element môže byť vymazaný z poľa pomocou výmazu . Príkaz odstránenia sa môže použiť aj na odstránenie celého obsahu poľa, a to zadaním názvu poľa bez indexu.

Variabilné písanie a konverzia

Premenné a polia môžu byť čísla (s pohyblivou čiarou) alebo reťazce, alebo oboje. Ako sa interpretuje hodnota premennej závisí od jej kontextu. Ak sa použije v číselnom vyjadrení, bude sa považovať za číslo, ak sa použije ako reťazec, bude sa považovať za reťazec.

Ak chcete, aby sa premenná považovala za číslo, pridajte ju 0; nútiť ho, aby sa s ňou zaobchádzalo ako s reťazcom, spojiť ho s nulovým reťazcom.

Keď sa reťazec musí konvertovať na číslo, konverzia sa vykoná pomocou strtod (3). Číslo sa prevedie na reťazec pomocou hodnoty CONVFMT ako formátového reťazca pre sprintf (3) s číselnou hodnotou premennej ako argument. Napriek tomu, že všetky čísla v AWK sú plovoucí bod, integrálne hodnoty sú vždy konvertované ako celé čísla. Tak, daný

CONVFMT = "% 2.2f" a = 12 b = a ""

premenná b má hodnotu reťazca "12" a nie "12.00" .

Gawk vykoná porovnanie nasledovne: Ak sú dve premenné numerické, porovnávajú sa číselne. Ak je jedna hodnota číselná a druhá má hodnotu reťazca, ktorá je "číselný reťazec", potom sa porovnáva aj číselne. V opačnom prípade sa číselná hodnota prevedie na reťazec a vykoná sa porovnanie reťazcov. Dve struny sú samozrejme porovnávané ako struny. Všimnite si, že štandard POSIX uplatňuje pojem "číselný reťazec" všade, dokonca aj na konštanty reťazca. Je to však jednoznačne nesprávne, a gawk to neurobí. (Našťastie to je opravené v ďalšej verzii normy.)

Všimnite si, že reťazcové konštanty, napríklad "57" , nie sú číselné reťazce, sú to reťazcové konštanty. Myšlienka `` numerický reťazec '' sa vzťahuje iba na polia, getline vstup, FILENAME , prvky ARGV, elementy ENVIRON a prvky poľa vytvoreného split (), ktoré sú numerické reťazce. Základnou myšlienkou je, že užívateľský vstup a iba vstup pre používateľa, ktorý vyzerá číselne, by sa mal takto zaobchádzať.

Neinicializované premenné majú číselnú hodnotu 0 a reťazovú hodnotu "" (reťazec null alebo prázdny).

Oktálne a hexadecimálne konštanty

Počnúc verziou 3.1 gawk môžete vo svojom zdrojovom kóde programu AWK použiť oktávové a hexadecimálne konštanty v štýle C. Napríklad osmičková hodnota 011 sa rovná desatinnej 9 a hexadecimálna hodnota 0x11 sa rovná desatinnej číslice 17.

Konštanty reťazca

Konštanty reťazcov v AWK sú sekvencie znakov, ktoré sú uzavreté medzi dvojitými úvodzovkami ( " ). V rámci reťazcov sú rozpoznané určité sekvencie úniku , ako v C. Sú to:

\\

Doslovné spätné lomítko.

\ a

Znak "výzvy"; zvyčajne znak ASCII BEL.

\ b

backspace.

\ f

forma podávania.

\ n

Nový riadok.

\ r

vrátenie vozidla.

\ t

vodorovná záložka.

\ v

vertikálna záložka.

\ x hexadecimálne číslice

Znak reprezentovaný reťazcom hexadecimálnych číslic nasledujúcich po \ x . Rovnako ako v programe ANSIC sa všetky nasledujúce hexadecimálne číslice považujú za súčasť únikovej sekvencie. (Táto funkcia by nám mala povedať niečo o jazykovom návrhu výboru). Napr. "\ X1B" je znak ASCIIESC (escape).

\ ddd

Znak reprezentovaný 1-, 2- alebo 3-číselnou sekvenciou osičích číslic. Napríklad "\ 033" je znak ASCII ESC (escape).

\ c

Doslovný charakter c .

Únikové sekvencie sa môžu použiť aj v konštantných regulárnych výrazoch (napr. / [\ T \ f \ n \ r \ v] / zodpovedá znaky medzery).

V režime kompatibility sa znaky reprezentované oktávovými a hexadecimálnymi sekvenciami escape spracujú doslovne pri použití v konštantách regulárneho výrazu. Teda, / a \ 52b / je ekvivalentný / a \ * b / .

Vzory a akcie

AWK je jazykovo orientovaný jazyk. Vzor prichádza najprv a potom akcia. Príkazy o výkone sú priložené v { a } . Buď vzor môže chýbať, alebo akcia môže chýbať, ale samozrejme nie oboje. Ak vzorka chýba, akcia sa vykoná pre každý záznam vstupu. Chýbajúce akcie sú ekvivalentné

{print}

ktorý vytlačí celý záznam.

Komentáre začínajú znakom "#" a pokračujú až do konca riadku. Na oddelenie výpisov je možné použiť prázdne riadky. Zvyčajne vyhlásenie končí novým riadkom, avšak to nie je prípad liniek končiacich v súbore ``, '', { , ? , : , && , alebo || , Línie končiace v alebo inak tiež majú svoje vyhlásenia automaticky pokračovať na nasledujúcom riadku. V ostatných prípadoch môže byť riadok pokračovať tak, že ho ukončíte ', v takom prípade bude nový riadok ignorovaný.

Viaceré príkazy sa dajú umiestniť na jeden riadok tak, že ich oddeľujete znakom ``; ''. Toto sa vzťahuje na vyhlásenia v rámci akčnej časti páru vzorov a akcií (obvyklý prípad), ako aj na výkazy vlastností vzoru.

vzory

Vzory AWK môžu byť nasledovné:

BEGIN END / regulárny výraz / vzorec vzťahu vzťahov & pattern vzorov || vzor vzor ? vzor : vzor ( vzor ) ! vzor vzor1 , vzor2

BEGIN a END sú dva špeciálne druhy vzorov, ktoré nie sú testované proti vstupu. Akčné časti všetkých vzorov BEGIN sa zlúčia, ako keby boli všetky príkazy napísané v jednom bloku BEGIN . Vykonajú sa skôr, než sa číta každý vstup. Podobne sa všetky END bloky zlúčia a vykonajú, keď je všetok vstup vyčerpaný (alebo keď sa vykoná príkaz výstupu ). Vzory BEGIN a END nie je možné kombinovať s inými vzormi vo výrazoch. Začiatočné a koncové modely nemôžu chýbať časti akcie.

Pre / regulárny výraz / vzory sa príslušné vyhlásenie vykoná pre každý vstupný záznam, ktorý zodpovedá regulárnemu výrazu. Pravidelné výrazy sú rovnaké ako v egrep (1) a sú zhrnuté nižšie.

Relačný výraz môže používať ktorýkoľvek z operátorov definovaných nižšie v časti Akcie. Tieto zvyčajne testujú, či sa určité polia zhodujú s určitými regulárnymi výrazmi.

& & , || , a ! operátori sú logickí AND, logický OR a logický NOT, ako v C. Vykonávajú skratové hodnotenie, rovnako ako v C, a používajú sa na kombinovanie primitívnejších výrazových vzorov. Rovnako ako vo väčšine jazykov je možné použiť zátvorky na zmenu poradia hodnotenia.

Operátor?: Je rovnaký operátor v C. Ak je prvý vzor pravdivý, potom vzor použitý na testovanie je druhý vzor, ​​inak je to tretí. Vyhodnocuje sa len jeden z druhého a tretieho vzoru.

Vzor pattern1 , pattern2 výrazu sa nazýva rozsahový vzor . Zodpovedá všetkým vstupným záznamom začínajúcim záznamom, ktorý zodpovedá vzoru1 a pokračuje až do záznamu, ktorý zodpovedá vzoru2 , vrátane. Nekombinuje sa s iným výrazom.

Pravidelné výrazy

Pravidelné výrazy sú rozšírené v egrep . Skladajú sa z nasledujúcich znakov:

C

sa zhoduje s metódou non-metacharacter c .

\ c

zodpovedá doslovnému znaku c .

,

zodpovedá ľubovoľnej osobe vrátane nového riadku.

^

zodpovedá začiatku reťazca.

$

zodpovedá koncu reťazca.

[ abc ... ]

zoznam znakov, zodpovedá akémukoľvek znaku abc ....

[^ abc ... ]

negovaný zoznam znakov, zodpovedá ľubovoľnému znaku okrem abc ....

r1 | r2

striedanie: zodpovedá buď r1 alebo r2 .

R1R2

zlučovanie: zhody r1 a potom r2 .

r +

zodpovedá jednej alebo viacerým r .

r *

zodpovedá nula alebo viac r .

r ?

zodpovedá nule alebo jednej r .

( r )

zoskupenie: zápasy r .

r { n }

r { n ,}

r { n , m } Jedno alebo dve čísla vo vnútri rovnačiek označujú intervalový výraz . Ak je v zátvorkách jedno číslo, predchádzajúci regulárny výraz r sa opakuje n krát. Ak sú dve čísla oddelené čiarkou, r sa opakuje nm krát. Ak je jedno číslo nasledované čiarou, potom sa r opakuje aspoň n krát.

Intervalové výrazy sú k dispozícii iba vtedy, ak je na príkazovom riadku zadaný buď --posix alebo --re-interval .

\ y

sa zhoduje s prázdnym reťazcom na začiatku alebo na konci slova.

\ B

zodpovedá prázdnemu reťazcu v rámci slova.

\ <

sa zhoduje s prázdnym reťazcom na začiatku slova.

\>

sa zhoduje s prázdnym reťazcom na konci slova.

\ w

zodpovedá ľubovoľnému znaku zložky (písmeno, číslica alebo podčiarknutie).

\ W

zodpovedá akejkoľvek charaktere, ktorá nie je slovo-zložka.

\ `

zodpovedá prázdnemu reťazcu na začiatku vyrovnávacej pamäte (reťazec).

\ '

sa zhoduje s prázdnym reťazcom na konci vyrovnávacej pamäte.

Úsekové sekvencie, ktoré sú platné v reťazových konštáloch (pozri nižšie), sú tiež platné v regulárnych výrazoch.

Triedy znakov sú novou funkciou zavedenou v štandarde POSIX. Trieda znakov je špeciálna notácia na opis zoznamov znakov, ktoré majú špecifický atribút, ale kde samotné skutočné znaky sa môžu v jednotlivých krajinách líšiť a / alebo z množiny znakov na znakovú sadu. Napríklad v USA a vo Francúzsku sa líši pojem abecedného charakteru.

Trieda znakov je platná iba v regulárnom výrazu v zátvorkách zoznamu znakov. Triedy znakov pozostávajú z [: , kľúčového slova označujúceho triedu a :] . Triedy znakov definované štandardom POSIX sú:

[: Alnum:]

Alfanumerické znaky.

[: Alpha:]

Abecedné znaky.

[: Blank:]

Priestorové alebo tabuľkové znaky.

[: CNTRL:]

Ovládajte znaky.

[: Digit:]

Číselné znaky.

[: Graf:]

Znaky, ktoré sú tlačiteľné aj viditeľné. (Miesto je možné vytlačiť, ale nie je viditeľné, zatiaľ čo a je oboje.)

[: Nižšie:]

Malé abecedné znaky.

[: Print:]

Tlačiteľné znaky (znaky, ktoré nie sú riadiacimi znakmi.)

[: Punctata:]

Interpunkčné znaky (znaky, ktoré nie sú písmená, číslice, riadiace znaky alebo medzery).

[: Space:]

Priestorové znaky (napríklad medzery, tabuľky a formuláre, aby sme mohli pomenovať niekoľko).

[: Horná:]

Veľké abecedné znaky.

[: Xdigit:]

Znaky, ktoré sú hexadecimálne číslice.

Napríklad pred štandardom POSIX, aby sa zhodovali s alfanumerickými znakmi, museli by ste napísať / [A-Za-z0-9] / . Ak by vaša sada znakov obsahovala iné abecedné znaky, nezhodovala by sa s nimi, a ak vaša sada znakov bola zoradená inak ako ASCII, nemusí sa to ani zhodovať s alfanumerickými znakmi ASCII. Pomocou tried znakov POSIX môžete napísať / [[: alnum:]] / a to zodpovedá abecedným a číselným znakom vo vašej sade znakov.

V zoznamoch znakov sa môžu zobraziť dve ďalšie špeciálne sekvencie. Tieto sa vzťahujú na znakové sady bez ASCII, ktoré môžu mať jednoduché symboly (nazývané zberné prvky ), ktoré sú reprezentované viacerými znakmi, ako aj niekoľko znakov, ktoré sú ekvivalentné na účely zoradenia alebo triedenia. (Napr. Vo francúzštine je ekvivalentná rovina `` e '' a hrubý akcent.)

Zoradenie symbolov

Zoskupujúci symbol je viacmiestny zoradený prvok uzavretý v [. a .] . Napríklad, ak ch je prvok na porovnávanie, potom [[.ch.]] Je regulárny výraz, ktorý zodpovedá tomuto porovnávaciemu prvku, zatiaľ čo [ch] je regulárny výraz, ktorý zodpovedá buď c alebo h .

Triedy rovnocennosti

Trieda ekvivalencie je názov špecifický pre miestne nastavenie pre zoznam znakov, ktoré sú ekvivalentné. Názov je uzavretý v [= a =] . Napríklad názov e by mohol byť použitý na reprezentáciu všetkých e, e, e a e. V tomto prípade je [[= e =]] regulárnym výrazom, ktorý zodpovedá ktorejkoľvek z e , e ' alebo e` .

Tieto funkcie sú veľmi cenné v neanglicky hovoriacich lokalitách. Funkcie knižnice, ktoré používa gawk na reguláciu výrazov, v súčasnosti rozpoznávajú iba triedy znakov POSIX; nerozpoznávajú porovnávacie symboly alebo triedy ekvivalencie.

Operátori \ y , \ B , \ < , \> , \ w , \ W , \ ' a \' sú špecifické pre gawk ; sú rozšírenia založené na zariadeniach v knižniciach regulárnej expresie GNU.

Rôzne možnosti príkazového riadku riadia, ako gawk interpretuje znaky v regulárnych výrazoch.

Žiadne možnosti

V predvolenom prípade poskytuje gawk všetky možnosti regulárnych výrazov POSIX a operátorov regulárnej expresie GNU opísaných vyššie. Intervalové výrazy však nie sú podporované.

--posix

Podporované sú iba regulárne výrazy POSIX, operátory GNU nie sú špeciálne. (Napr., \ W sa zhoduje s doslovným w ). Intervalové výrazy sú povolené.

--traditional

Tradičné Unixové awk regulárne výrazy sú zosúladené. Operátori GNU nie sú špeciálni, intervalové výrazy nie sú k dispozícii a ani triedy znakov POSIX ( [[: alnum:]] a tak ďalej. Znaky opísané osmičkami a hexadecimálnymi sekvenciami sa zachytávajú doslovne, aj keď predstavujú metacharactery s regulárnym výrazom.

--re intervalu

Povoliť intervalové výrazy v regulárnych výrazoch, a to aj vtedy, ak je poskytnutá - tradičná .

Akcia

Vyhlásenia o činnosti sú uzavreté v zátvorkách, { a } . Akčné vyhlásenia pozostávajú z obvyklých zadaní, podmienených a slučkových vyhlásení, ktoré sa nachádzajú vo väčšine jazykov. Operátori, kontrolné výkazy a dostupné vstupné / výstupné výkazy sú vzorované po tých, ktoré sú uvedené v C.

operátori

Prevádzkovatelia v AWK sú v poradí klesajúcich priorít

( ... )

zoskupenia

$

Odkaz na pole.

++ -

Zvýšenie a zníženie, prefix aj postfix.

^

Exponentiation ( ** môže byť tiež použitá a ** = pre operátor priradenia).

+ -!

Unary plus, unary mínus a logická negácia.

* /%

Násobenie, rozdelenie a modul.

+ -

Pridanie a odčítanie.

priestor

Spojité reťazce.

<>

<=> =

! = == Pravidelní relační operátori.

~! ~

Zhoda s regulárnym výrazom, negovaná zhoda. POZNÁMKA: Nepoužívajte konštantný regulárny výraz ( / foo / ) na ľavej strane ~ alebo ! ~ . Použite iba jednu na pravej strane. Výraz / foo / ~ exp má rovnaký význam ako (($ 0 ~ / foo /) ~ exp ) . To zvyčajne nie je to, čo bolo zamýšľané.

v

Členstvo v poli.

&&

Logické AND.

||

Logické OR.

?:

Podmienený výraz C. Má formulár expr1 ? expr2 : expr3 . Ak je expr1 pravdivá, hodnota výrazu je expr2 , inak je expr3 . Vyhodnocuje sa len jedna z expr2 a expr3 .

= + = - =

* = / =% = ^ = Priradenie. Sú podporované aj absolútne priradenie ( var = hodnota ) a priradenie operátora (ostatné formuláre).

Kontrolné vyhlásenia

Kontrolné výkazy sú nasledovné:

ak ( podmienka ) príkaz [ iný príkaz ] while statement ( statement ) urobí príkaz za ( podmienka ) príkaz ( expr1 ; expr2 ; expr3 ) vyhlásenia }

I / O vyhlásenia

Príkazy vstupu / výstupu sú nasledovné:

zatvoriť ( súbor [ , ako ] ]

Zatvorte súbor, potrubie alebo spoločný proces. Voliteľné, ako sa má používať iba pri zatváraní jedného konca dvojcestného potrubia do spoločného procesu. Musí to byť hodnota reťazca, buď "do", alebo "od" .

getline

Nastavte hodnotu $ 0 z ďalšieho záznamu; nastavte NF , NR , FNR .

getline < súbor

Nastavte $ 0 z ďalšieho záznamu súboru ; nastavte NF .

getline var

Nastavte var z ďalšieho vstupného záznamu; nastaviť NR , FNR .

getline var < súbor

Nastavte var z ďalšieho záznamu súboru .

príkaz | getline [ var ]

Spustite príkazové potrubie výstup buď do $ 0 alebo var , ako je uvedené vyššie.

príkaz | & getline [ var ]

Spustite príkaz ako spoločné spracovanie výstupu buď do $ 0 alebo var , ako je uvedené vyššie. Spoločné procesy sú rozšírením.

Ďalšie

Zastaviť spracovanie aktuálneho záznamu vstupu. Nasledujúci vstupný záznam sa číta a spracovanie začína s prvým vzorom v programe AWK. Ak sa dosiahne koniec vstupných údajov, vykonajú sa bloky END (ak existujú).

nextfile

Zastaviť spracovanie aktuálneho vstupného súboru. Ďalší vstupný záznam čítaný pochádza z nasledujúceho vstupného súboru. FILENAME a ARGIND sú aktualizované, hodnota FNR je resetovaná na 1 a spracovanie začína na prvom vzore v programe AWK. Ak sa dosiahne koniec vstupných údajov, vykonajú sa bloky END (ak existujú).

vytlačiť

Vytlačí aktuálny záznam. Výstupný záznam je ukončený hodnotou premennej ORS .

vytlačiť zoznam expr-list

Vytlačí výrazy. Každý výraz je oddelený hodnotou OFS premennej. Výstupný záznam je ukončený hodnotou premennej ORS .

print expr-list > súboru

Vytlačí výrazy v súbore . Každý výraz je oddelený hodnotou OFS premennej. Výstupný záznam je ukončený hodnotou premennej ORS .

printf fmt, expr-list

Formátovanie a tlač.

printf fmt, expr-list > súbor

Formátujte a vytlačte súbor .

systém ( cmd-riadok )

Spustite príkaz cmd-line a vráťte stav výstupu. (Toto nemusí byť dostupné v systémoch, ktoré nepodporujú POSIX.)

fflush ( [ súbor ] )

Vypláchnite všetky vyrovnávacie pamäte spojené s otvoreným výstupným súborom alebo súborom potrubia. Ak chýba súbor , štandardný výstup sa spustí. Ak je súbor nulový reťazec, všetky otvorené výstupné súbory a potrubia majú vyprázdnené vyrovnávacie pamäte.

Dodatočné presmerovania výstupov sú povolené pre tlač a printf .

vytlačiť ... >> súbor

pripojí výstup do súboru .

tlač ... | príkaz

píše na potrubí.

tlač ... & príkaz

odosiela údaje do spoločného procesu.

Príkaz getline vráti 0 na konci súboru a -1 na chybu. Po chybe ERRNO obsahuje reťazec popisujúci problém.

POZNÁMKA: Ak používate potrubie alebo spoločné spracovanie na linku getline alebo tlač alebo printf vo vnútri slučky, musíte použiť close () na vytvorenie nových inštancií príkazu. AWK automaticky nezatvára potrubia alebo spoločné procesy, keď vrátia EOF.

Príkaz printf

Verzie AWK vyhlásenia printf a sprintf () (pozri nižšie) akceptujú nasledujúce formáty špecifikácie konverzie:

% c

Znak ASCII. Ak argument použitý pre % c je číselný, považuje sa za znak a vytlačený. V opačnom prípade sa predpokladá, že argument je reťazec a vytlačí sa iba prvý znak tohto reťazca.

% d , % i

Desiatkové číslo (celé číslo).

% e,% E

Číslo s pohyblivou čiarou formulára [-] d.dddddde [+ -] dd . Formát % E používa E namiesto e .

% f

Číslo s pohyblivou čiarou formulára [-] ddd.dddddd .

% g,% G

Použite konverziu % e alebo % f , podľa toho, ktorá hodnota je kratšia, s potlačenými nulovými nulami. Formát % G používa % E namiesto % e .

% o

Nepodpísané osmičkové číslo (tiež celé číslo).

% u Nepodpísané desatinné číslo (opäť celé číslo).

% s

Reťazec znakov.

% x,% X

Nepodpísané hexadecimálne číslo (celé číslo). Formát % X používa ABCDEF namiesto abcdef .

%%

Jeden znak % ; žiadny argument nie je konvertovaný.

Voliteľné prídavné parametre môžu ležať medzi percentom a kontrolným písmenom:

počítať $

Použite počiatočný argument v tomto okamihu pri formátovaní. Toto sa nazýva polohový špecifikátor a je určený predovšetkým na použitie v preložených verziách formátovacích reťazcov, nie v pôvodnom texte programu AWK. Je to predĺženie.

-

Tento výraz by mal byť vo svojej oblasti odôvodnený vľavo.

priestor

Pre číselné premeny, prefixové pozitívne hodnoty s medzerou a záporné hodnoty so znamienkom mínus.

+

Znak plus, ktorý sa používa pred modifikátorom šírky (pozri nižšie), hovorí, že vždy dodá značku pre číselné konverzie, a to aj vtedy, ak sú údaje, ktoré majú byť naformátované, pozitívne. + Prepíše modifikátor priestoru.

#

Pre niektoré ovládacie písmená použite alternatívnu formu. Pre % o dodajte prednú nulu. Pre % x a % X poskytnite vedúci 0x alebo 0X pre nenulový výsledok. Pre % e , % E a % f , výsledok vždy obsahuje desatinnú čiarku. Pre % g a % G nie sú z výsledku odstránené koncové nuly.

0

Vedúci 0 (nula) pôsobí ako príznak, ktorý označuje, že výstup by mal byť vyplnený nulami namiesto medzery. Platí to aj pre nečíselné výstupné formáty. Táto príznak má účinok iba vtedy, keď je šírka poľa väčšia ako hodnota, ktorá sa má vytlačiť.

šírka

Pole by malo byť čalúnené takouto šírkou. Pole je obyčajne vyplnené medzerami. Ak bol použitý príznak 0 , je opatrený nulami.

, prec

Číslo, ktoré určuje presnosť použitia pri tlači. Formáty % e , % E a % f udávajú počet číslic, ktoré chcete vytlačiť vpravo od desatinnej čiarky. Pre % g a % G formátov určuje maximálny počet významných číslic. Pre formáty % d , % o , % i , % u , % x a % X určuje minimálny počet číslic, ktoré sa majú vytlačiť. Pre % s určuje maximálny počet znakov z reťazca, ktorý sa má vytlačiť.

Je podporovaná dynamická šírka a predpoklady rutín ANSI C printf () . A * namiesto špecifikácie šírky alebo špecifikácie spôsobí, že ich hodnoty budú prevzaté zo zoznamu argumentov na printf alebo sprintf () . Ak chcete použiť polohový špecifikátor s dynamickou šírkou alebo presnosťou, zadajte počet $ po znaku * vo formáte reťazca. Napríklad "% 3 $ * 2 $. * 1 $ s" .

Špeciálne názvy súborov

Pri presmerovaní I / O buď z tlače alebo printf do súboru, alebo prostredníctvom getline zo súboru, gawk rozpoznáva určité špeciálne mená súborov interne. Tieto názvy súborov umožňujú prístup k otvoreným deskriptorom súborov zdedených z rodičovského procesu gawk (zvyčajne shell). Tieto názvy súborov sa môžu použiť aj na príkazovom riadku na zadanie názvov dátových súborov. Názvy súborov sú:

/ Dev / stdin

Štandardný vstup.

/ Dev / štandardný výstup

Štandardný výstup.

/ Dev / stderr

Štandardný výstup chyby.

/ dev / fd / n

Súbor spojený s otvoreným deskriptorom súborov n .

Tieto sú obzvlášť užitočné pre chybové hlásenia. Napríklad:

vytlačiť "Vypršal si to!" > "/ dev / stderr"

zatiaľ čo by ste inak museli používať

vytlačiť "Vypršal si to!" | "mačka 1> & 2"

Nasledujúce špeciálne názvy súborov sa môžu používať s operátorom | & co-process for creating TCP / IP network connections.

/ inet / tcp / lport / rhost / rport

Súbor na pripojenie TCP / IP na lokálnom portu lport na vzdialený hostiteľský server na vzdialenom portu rport . Použite port 0, aby systém vybral port.

/ inet / udp / lport / rhost / rport

Podobné, ale použite UDP / IP namiesto TCP / IP.

/ inet / raw / lport / rhost / rport

Vyhradené pre budúce použitie.

Ďalšie špeciálne názvy súborov poskytujú prístup k informáciám o procese spustenia. Tieto názvy súborov sú už zastarané. Použite pole PROCINFO na získanie informácií, ktoré poskytujú. Názvy súborov sú:

/ Dev / pid

Čítanie tohto súboru vracia ID procesu aktuálneho procesu, v desatinnom čísle, ukončený novým riadkom.

/ Dev / ppid

Čítanie tohto súboru vracia identifikáciu rodičovského procesu aktuálneho procesu v desiatkovej sústave, ukončenej novým riadkom.

/ Dev / pgrpid

Čítanie tohto súboru vracia ID skupiny procesov v aktuálnom procese, v desiatkovej sústave, ukončenej novým riadkom.

/ Dev / používateľ

Čítaním tohto súboru sa vráti jeden záznam ukončený novým riadkom. Polia sú oddelené medzerami. $ 1 je hodnota systémového volania getuid (2), $ 2 je hodnota systémového volania geteuid (2), $ 3 je hodnota systému call getgid (2) a $ 4 je hodnota getegidu (2) systémový hovor. Ak existujú ďalšie polia, ide o identifikátory skupín vrátené skupinou get (2). Niektoré skupiny nemusia byť podporované vo všetkých systémoch.

Číselné funkcie

AWK má nasledujúce zabudované aritmetické funkcie:

atan2 ( y , x )

Vracia arktangent y / x v radiánoch.

cos ( expr )

Vráti kosínus expr , ktorý je v radiánoch.

exp ( expr )

Exponenciálna funkcia.

int ( expr )

Skráti na celé číslo.

log ( expr )

Funkcia prirodzeného logaritmu.

rand ()

Vráti náhodné číslo medzi 0 a 1.

hriech ( expr )

Vráti sínus expr , ktorý je v radiánoch.

sqrt ( expr )

Funkcia odmocniny.

srand ( [ expr ] )

Používa expr ako nové osivo pre generátor náhodných čísel. Ak nie je poskytnuté žiadne vysvetlenie , použije sa denný čas. Vrátenou hodnotou je predchádzajúce osivo generátora náhodných čísel.

Funkcie reťazca

Gawk má nasledujúce vstavané reťazcové funkcie:

asort ( s [ , d ] )

Vráti počet prvkov v zdrojovom poli. Obsah s je zoradený pomocou normálnych pravidiel Gawk pre porovnávanie hodnôt a indexy triedených hodnôt s sú nahradené po sebe nasledujúcimi celými číslami začínajúcimi 1. Ak je zadané voliteľné cieľové pole d , potom sa s najskôr duplicitne do d , a potom je d zoradený, takže indexy zdrojového poľa sa nemenia.

gensub ( r , s , h [ , t ] )

Vyhľadajte cieľový reťazec t pre zápasy normálneho výrazu r . Ak h je reťazec začínajúci g alebo G , potom všetky súradnice r nahraďte s s . V opačnom prípade h je číslo označujúce, ktoré zhody r sa nahradia. Ak t nie je dodávané, namiesto toho sa použije $ 0 . V rámci náhradného textu s môže byť použitá sekvencia \ n , kde n je číslica od 1 do 9, ktorá označuje iba text, ktorý zodpovedá n- tej záhlavnej subexpresii. Sekvencia \ 0 predstavuje celý zhodený text, rovnako ako znak & . Na rozdiel od sub () a gsub () , modifikovaný reťazec sa vráti ako výsledok funkcie a pôvodný cieľový reťazec sa nezmení.

gsub ( r , s [ , t ) )

Pre každý podreťazec zodpovedajúci regulárnemu výrazu r v reťazci t , nahraďte reťazec s a vráťte počet substitúcií. Ak t nie je dodávané, použite $ 0 . A & v náhradnom texte sa nahradí textom, ktorý bol skutočne zosúladený. Použite \ & na získanie doslovného & . (Toto musí byť napísané ako "\\" , viď GAWK: Efektívne programovanie AWK pre podrobnejšiu diskusiu o pravidlách pre & a backslash v náhradnom texte sub () , gsub () a gensub () .)

index ( s , t )

Vráti index reťazca t v reťazci s alebo 0, ak t nie je prítomný. (Znamená to, že indexy znakov začínajú na jednom.)

dĺžka ( [ s ] )

Vráti dĺžku reťazca s alebo dĺžku $ 0, ak s nie je dodaná.

zhody ( s , r [ , a ] )

Vráti polohu v s, kde sa vyskytuje regulárny výraz r , alebo 0, ak r nie je prítomné a nastaví hodnoty RSTART a RLENGTH . Všimnite si, že poradie argumentov je rovnaké ako pre operátor: str . Ak je pole a poskytnuté, a je vymazané a potom prvky 1 až n sú naplnené časťami s, ktoré zodpovedajú zodpovedajúcej zátvarej subexpresii v r . 0 prvý prvok a obsahuje časť s zodpovedajúcu celému regulárnemu výrazu r .

rozdelenie ( s , a [ , r ] )

Rozdelí reťazce do poľa a na regulárny výraz r a vráti počet polí. Ak je r vynechané, namiesto toho sa použije FS . Najskôr sa vymaže pole a . Rozdelenie sa správa rovnako ako rozdelenie poľa, popísané vyššie.

sprintf ( fmt , expr-list )

Vytlačí expr-list podľa fmt a vráti výsledný reťazec.

strtonum ( str )

Skúma str a vráti svoju číselnú hodnotu. Ak str začína s vedúcim 0 , strtonum () predpokladá, že str je osmičkové číslo. Ak str začína s vedúcim 0x alebo 0X , strtonum () predpokladá, že str je hexadecimálne číslo.

sub ( r , s [ , t ] )

Rovnako ako gsub () , ale nahradí sa iba prvý zodpovedajúci podreťazec.

substr ( s , i , n )

Vracia najviac n -charakter podstringu s začínajúce na i . Ak sa n vynechá, použije sa zvyšok s .

tolower ( str )

Vráti kópiu reťazca str so všetkými veľkými písmenami v str preložených na ich zodpovedajúce malé protějšky. Nealbabetické znaky zostávajú nezmenené.

tupper ( str )

Vráti kópiu reťazca str , so všetkými malými písmenami v str preložené na ich zodpovedajúce väčšie náprotivky. Nealbabetické znaky zostávajú nezmenené.

Časové funkcie

Keďže jedno z primárnych použití programov AWK spracováva súbory denníkov, ktoré obsahujú informácie o časovej pečiatke, gawk poskytuje nasledujúce funkcie na získanie časových pečiatok a ich formátovanie.

mktime ( datespec )

Rurns datespec do časovej pečiatky rovnakej formy ako vrátil systime () . Datespec je reťazec formulára YYYY MM DD HH MM SS [DST] . Obsah reťazca obsahuje šesť alebo sedem čísel, ktoré reprezentujú celý rok, vrátane storočia, mesiaca od 1 do 12, dňa v mesiaci od 1 do 31, hodiny dňa od 0 do 23, minúty od 0 do 59 a druhá od 0 do 60 a voliteľná vlajka na letný čas. Hodnoty týchto čísel nemusia byť v rámci špecifikovaných rozsahov; napríklad hodina -1 znamená 1 hodinu pred polnocou. Predpokladá sa pôvodný nulový gregoriánsky kalendár, pričom rok 0 predchádza rok 1 a rok -1 predchádzajúci rok 0. Predpokladá sa, že čas sa nachádza v miestnom časovom pásme. Ak je príznak letného času pozitívny, predpokladá sa, že čas je letný čas; ak je nula, predpokladá sa, že čas je štandardný čas; a ak je záporné (predvolené), mktime () sa pokúsi určiť, či je letný čas v určenom čase platný. Ak datespec neobsahuje dostatok prvkov alebo ak výsledný čas je mimo rozsah, mktime () vráti -1.

strftime ( [ formát [ , časové označenie ]] )

Formáty časovej značky podľa špecifikácie vo formáte. Časová pečiatka by mala mať rovnakú formu ako vrátená systime () . Ak chýba časová pečiatka , použije sa aktuálny čas. Ak formát chýba, použije sa predvolený formát zodpovedajúci výstupu dátumu (1). Pozrite si špecifikáciu funkcie strftime () v ANSI C pre konverziu formátu, ktorá je zaručená, že bude k dispozícii. Verejná doména verzie strftime (3) a manuálovej stránky pre ňu prichádzajú s gawk ; ak bola táto verzia použitá na vytvorenie gawk , potom sú všetky konverzie popísané v tejto manuálovej stránke k dispozícii gawk.

systime ()

Vráti aktuálny denný čas ako počet sekúnd od Epocha (1970-01-01 00:00:00 UTC na systémoch POSIX).

Funkcie bitových manipulácií

Počnúc verziou 3.1 gawk sú k dispozícii nasledovné bitové manipulačné funkcie. Pracujú tak, že konvertujú hodnoty s dvojnásobnou presnosťou s pohyblivou rádovou čiarkou na nepodpísané dlhé celé čísla, vykonajú operáciu a potom konvertujú výsledok späť na pohyblivú hodinu. Funkcie sú:

a ( v1 , v2 )

Návrat bitových AND hodnôt poskytnutých v1 a v2 .

compl ( val )

Vráti bitový doplnok val .

lshift ( val , count )

Vráťte hodnotu valu , posunutú vľavo počet bity.

alebo ( v1 , v2 )

Vráťte bitovú OR z hodnôt poskytnutých v1 a v2 .

rshift ( val , count )

Vráťte hodnotu val , posunutú doprava počítanými bitmi.

xor ( v1 , v2 )

Vráťte bitovú hodnotu XOR hodnôt poskytnutých v1 a v2 .

Funkcie internacionalizácie

Počínajúc verziou 3.1 gawk , môžu byť vo vašom programe AWK použité nasledujúce funkcie na prekladanie reťazcov za behu. Podrobné informácie nájdete v článku GAWK: Efektívne programovanie AWK .

bindtextdomain ( adresár [ , doména ] )

Určuje adresár, v ktorom vyhľadávacie súbory .mo nájdu v prípade, že nebudú alebo nemôžu byť umiestnené na štandardných miestach (napr. Počas testovania). Vráti adresár, kde je doména viazaná.

Predvolená doména je hodnota TEXTDOMAIN . Ak je adresár reťazec null ( "" ), potom bindtextdomain () vráti aktuálnu väzbu pre danú doménu .

dcgettext ( reťazec [ , doména [ , kategória ]] )

Vráti preklad reťazca do domény textovej domény pre kategóriu kategórie lokality. Predvolená hodnota pre doménu je aktuálna hodnota TEXTDOMAIN . Predvolená hodnota pre kategóriu je "LC_MESSAGES" .

Ak zadáte hodnotu pre kategóriu , musí to byť reťazec, ktorý sa rovná jednej zo známych kategórií lokalizácie popísaných v GAWK: Efektívne programovanie AWK . Musíte tiež poskytnúť textovú doménu. Použite TEXTDOMAIN, ak chcete použiť aktuálnu doménu.

dcngettext (reťazec1, reťazec2 , číslo [ , doména [ , kategória ]] )

Vráti formu množného čísla použitého pre číslo prekladu reťazca1 a reťazca2 v doméne domény textovej kategórie . Predvolená hodnota pre doménu je aktuálna hodnota TEXTDOMAIN . Predvolená hodnota pre kategóriu je "LC_MESSAGES" .

Ak zadáte hodnotu pre kategóriu , musí to byť reťazec, ktorý sa rovná jednej zo známych kategórií lokalizácie popísaných v GAWK: Efektívne programovanie AWK . Musíte tiež poskytnúť textovú doménu. Použite TEXTDOMAIN, ak chcete použiť aktuálnu doménu.

FUNKCIE DEFINOVANÉ UŽÍVATEĽOM

Funkcie v AWK sú definované nasledovne:

názov funkcie ( zoznam parametrov ) { statements }

Funkcie sa vykonávajú, keď sú vyvolané z výrazov v obraze alebo v akcii. Aktuálne parametre dodávané vo funkčnom volaní sa používajú na inštanciu formálnych parametrov deklarovaných vo funkcii. Polia sú odovzdávané referenciou, iné premenné prechádzajú hodnotou.

Keďže funkcie neboli pôvodne súčasťou jazyka AWK, ustanovenie pre lokálne premenné je pomerne nemotorné: sú deklarované ako ďalšie parametre v zozname parametrov. Dohovor spočíva v oddelení miestnych premenných od skutočných parametrov extra priestormi v zozname parametrov. Napríklad:

funkcia f (p, q, a, b) # a a b sú lokálne {...} / abc / {...; f (1, 2); ...}

Ľavá zátvorka vo funkčnom volaní je potrebná na bezprostredné sledovanie názvu funkcie bez akéhokoľvek bieleho medzery. To má zabrániť syntaktickej nejednoznačnosti s operátorom zreťazenia. Toto obmedzenie sa nevzťahuje na vstavané funkcie uvedené vyššie.

Funkcie sa môžu volat 'navzájom a môžu byť rekurzívne. Funkčné parametre, ktoré sa používajú ako lokálne premenné, sa inicializujú na nulový reťazec a číslicu nula po vyvolaní funkcie.

Pomocou návratovej expr vráti hodnotu z funkcie. Hodnota návratu je nedefinovaná, ak nie je poskytnutá žiadna hodnota, alebo ak sa funkcia vráti do konca.

Ak bol --lint poskytnutý, gawk varuje pred volaním nedefinovaných funkcií v čase analýzy, namiesto toho, aby bol v čase spustenia. Volanie nedefinovanej funkcie pri behu je fatálna chyba.

Slovo func sa môže použiť namiesto funkcie .

DYNAMICKY NAKLADANIE NOVÝCH FUNKCIÍ

Začínajúc verziou 3.1 gawk , môžete dynamicky pridávať nové vstavané funkcie do bežiaceho tlmočníka. Úplné podrobnosti sú mimo rámca tejto manuálovej stránky. pozri GAWK: Účinné programovanie AWK pre podrobnosti.

rozšírenie ( objekt , funkcia )

Dynamicky prepojiť súbor zdieľaného objektu s názvom podľa objektu a spustiť funkciu v danom objekte a vykonať inicializáciu. Tie by mali byť poskytované ako reťazce. Vráti hodnotu vrátenú funkciou .

Táto funkcia je poskytnutá a zdokumentovaná v GAWK: Efektívne programovanie AWK , ale všetko o tejto funkcii sa pravdepodobne zmení v ďalšom vydaní. STREDNE odporúčame, aby ste túto funkciu nepoužívali na čokoľvek, ktoré nie ste ochotní opätovne vykonať.

SIGNÁLY

pgawk prijíma dva signály. SIGUSR1 spôsobí vynechanie zásobníka volania profilu a funkcie do profilového súboru, ktorý je buď awkprof.out , alebo akýkoľvek súbor bol pomenovaný s voľbou --profile . Potom pokračuje. Funkcia SIGHUP spôsobí vynechanie zásobníka hovorov a funkcií a potom ukončenie.

PRÍKLADY

Vytlačte a zoradte prihlasovacie mená všetkých používateľov: BEGIN {FS = ":"} {print $ 1 | " vytlačiť "} Vypočítať riadky v súbore: {nlines ++} END {print nlines} Pred každým riadkom predísť číslom v súbore: {print FNR, $ 0} Zreťaziť a číslo riadku (variácia na tému): {print NR, $ 0}

internalizácia

Konštanty reťazca sú sekvencie znakov uzavretých v dvojitých úvodzovkách. V neanglicky hovorenom prostredí je možné označiť reťazce v programe AWK ako vyžadujúce preklad do pôvodného prirodzeného jazyka. Takéto reťazce sú označené v programe AWK s vedúcim podčiarknutím (`` _ ''). Napríklad,

gawk 'BEGIN {vytlačiť "ahoj, svet"}'

vždy vytlačí ahoj svet . Ale,

gawk 'BEGIN {print _ "Ahoj, svet"}'

môže tlačiť bonjour, monde vo Francúzsku.

Existuje niekoľko krokov pri vytváraní a spustení lokalizovateľného programu AWK.

1.

Ak chcete priradiť k premennej TEXTDOMAIN priradenie hodnoty BEGIN, nastavte textovú doménu na meno priradené k vášmu programu.


Začať {TEXTDOMAIN = "myprog"}

To umožňuje nájsť súbor .mo asociovaný s vaším programom. Bez tohto kroku gawk používa textovú doménu správ , ktorá pravdepodobne neobsahuje preklady pre váš program.

2.

Označte všetky reťazce, ktoré by mali byť preložené s vedúcimi podčiarkami.

3.

V prípade potreby použite funkciu dcgettext () a / alebo bindtextdomain () vo vašom programe podľa potreby.

4.

Spustite gawk --gen-po -f myprog.awk> myprog.po na vytvorenie súboru .po pre váš program.

5.

Poskytnite vhodné preklady a vytvorte a nainštalujte príslušný súbor .mo .

Funkcie internacionalizácie sú popísané podrobne v GAWK: Efektívne programovanie AWK .

Posix Compatibility

Primárnym cieľom pre gawk je kompatibilita so štandardom POSIX, rovnako ako s najnovšou verziou UNIX awk . Za týmto účelom obsahuje gawk nasledujúce viditeľné funkcie používateľov, ktoré nie sú opísané v knihe AWK, ale sú súčasťou verzie awk v laboratóriu Bell a sú v štandarde POSIX.

Kniha naznačuje, že priradenie premennej príkazového riadku sa stane, keď awk inak otvorí argument ako súbor, ktorý je po vykonaní bloku BEGIN . V predchádzajúcich implementáciách, ak sa takéto priradenie objavilo pred akýmkoľvek názvom súboru, priradenie sa uskutočnilo pred spustením bloku BEGIN . Aplikácie sa pridali k tejto funkcii. "Keď bola awk zmenená tak, aby zodpovedala jej dokumentácii, bola pridaná možnosť -v pre priradenie premenných pred spustením programu, aby sa vyhovelo aplikáciám, ktoré záviseli od starého správania. (Táto funkcia bola dohodnutá ako spoločnosťami Bell Laboratories, ako aj vývojármi GNU.)

Možnosť -W pre špecifické funkcie implementácie je z normy POSIX.

Pri spracovávaní argumentov gawk používa špeciálnu voľbu `` - '' na signalizáciu konca argumentov. V režime kompatibility varuje, ale inak ignoruje nedefinované možnosti. Pri normálnej prevádzke sa tieto argumenty prenášajú do programu AWK, aby sa spracovali.

Kniha AWK neurčuje návratovú hodnotu srand () . Norma POSIX má vrátiť osivo, ktoré používa, aby bolo možné sledovať sekvencie náhodných čísel. Preto srand () v gawk tiež vráti svoje aktuálne semeno.

Ďalšie nové funkcie sú: Použitie viacerých možností -f (z MKS awk ); pole ENVIRON ; \ a , a \ v únikové sekvencie (pôvodne vykonané v gawk a vrátené späť do verzie Bell Laboratories); tolower () a toupper () funkcie (z verzie Bell Laboratories); a špecifikácie konverzie ANSI C v printf (vykonané ako prvé vo verzii Bell Laboratories).

Historické prvky

Existujú dve funkcie historických implementácií AWK, ktoré podporujú. Po prvé, je možné zavolať funkciu length () vstavanú nielen bez argumentu, ale aj bez zátvoriek! To znamená,

a = dĺžka # Holy Algol 60, Batman!

je rovnaký ako jeden z nich

a = dĺžka ()
a = dĺžka ($ 0)

Táto funkcia je označená ako "zastaraná" v štandarde POSIX a gawk vydá varovanie o jej používaní, ak je na príkazovom riadku zadané --lint .

Ďalšou funkciou je použitie príkazov pre pokračovanie alebo prerušenie mimo časového úseku, za alebo za účelom vytvorenia slučky. Tradičné implementácie AWK považujú takéto použitie za rovnocenné s nasledujúcim vyhlásením. Gawk podporuje toto použitie, ak bol - špecifikovaný tradičný .

Rozšírenia GNU

Gawk má niekoľko rozšírení na POSIX awk . Sú opísané v tejto časti. Všetky tu opísané rozšírenia môžu byť zakázané vyvolaním gawk s tradičnou možnosťou.

Nasledujúce funkcie gawk nie sú dostupné v POSIX awk .

*

Nie je vykonané žiadne vyhľadávanie ciest pre súbory s názvom voľbou -f . Preto nie je premenná prostredia AWKPATH špeciálna.

*

Postup \ x escape. (Zakázané s --posix .)

*

Funkcia fflush () . (Zakázané s --posix .)

*

Schopnosť pokračovať po čias ? a :. (Zakázané s --posix .)

*

Oktálne a hexadecimálne konštanty v programoch AWK.

*

Premenné ARGIND , BINMODE , ERRNO , LINT , RT a TEXTDOMAIN nie sú špeciálne.

*

Premenná IGNORECASE a jej vedľajšie účinky nie sú k dispozícii.

*

Rozdelenie poľa FIELDWIDTHS a rozdelenie poľa s pevnou šírkou.

*

Pole PROCINFO nie je k dispozícii.

*

Používanie RS ako regulárny výraz.

*

Špeciálne názvy súborov, ktoré sú k dispozícii na presmerovanie I / O, nie sú rozpoznané.

*

Operátor | & pre vytváranie spoločných procesov.

*

Schopnosť rozdeliť jednotlivé znaky pomocou nulového reťazca ako hodnoty FS a ako tretí argument na rozdelenie () .

*

Voliteľný druhý argument pre funkciu close () .

*

Voliteľný tretí argument pre funkciu match () .

*

Schopnosť používať pozičné špecifikátory s printf a sprintf () .

*

Použitie poľa mazať odstrániť celý obsah poľa.

*

Použitie ďalšieho súboru na opustenie spracovania aktuálneho vstupného súboru.

*

Súbor a) , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () a xor () .

*

Lokalizovateľné reťazce.

*

Pridanie nových vstavaných funkcií dynamicky s funkciou rozšírenia () .

Kniha AWK neurčuje návratovú hodnotu funkcie close () . Gawk 's close () vráti hodnotu z fclose (3), alebo pclose (3) pri zatvorení výstupného súboru alebo potrubia. Vracia stav ukončenia procesu pri zatváraní vstupného potrubia. Vrátená hodnota je -1, ak sa názov súboru, potrubia alebo koprodukcie neotvoril s presmerovaním.

Keď je gawk vyvolaný pomocou tradičnej voľby, ak je argument fs pre voľbu -F "` t '', FS je nastavený na znak tabu . Všimnite si, že písanie gawk -F \ t ... jednoducho spôsobí, že shell bude citovať `` t, '' a neprechádza `` \ t '' na voľbu -F . Keďže ide o veľmi ošklivý prípad, nie je to predvolené správanie. Toto správanie sa tiež nevyskytuje, ak bol zadaný --posix . Ak chcete skutočne získať tabuľku ako oddeľovač polí, najlepšie je použiť jednoduché úvodzovky: gawk -F '\ t' ....

Pozrite sa na ďalšie príkazy : čakať , lp , kompletný , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , na , kto , iwconfig , ifconfig , vgdisplay , open , lsmod , ntohs , mailq , kill , wtmp