Naučite Linux ukaz - gawk

Ime

gawk - vzorec skeniranja in obdelave jezika

Povzetek

gawk [POSIX ali GNU style options] -f programska datoteka [ - ] datoteka ...
gawk [POSIX ali GNU možnosti sloga] [ - ] programska besedilna datoteka ...

pgawk [možnosti POSIX ali GNU sloga] -f programske datoteke [ - ] ...
pgawk [možnosti POSIX ali GNU sloga] [ - ] programska besedilna datoteka ...

Opis

Gawk je implementacija programskega jezika AWK projekta GNU . Skladen je z definicijo jezika v standardnem jeziku za ukazne jezike in komande POSIX 1003.2. Ta različica po vrsti temelji na opisu v Programskem jeziku AWK , ki so ga izdelali Aho, Kernighan in Weinberger, z dodatnimi funkcijami, ki jih najdemo v različici sistema UNIX awk 4 v sistemu. Gawk ponuja tudi novejšo razširitvene dodatke Bell Laboratories in številne razširitve, specifične za GNU.

Pgawk je profilna različica gawk . Je enak na vsak način, da gawk , razen da programi teče počasneje, in samodejno izdela izvršilni profil v datoteki awkprof.out, ko je končano. Oglejte si možnost --profile spodaj.

Komandna vrstica je sestavljena iz možnosti samega gawka , besedila programa AWK (če ni priložen prek možnosti -f ali --file ) in vrednosti, ki bodo na voljo v ARGC in ARGV vnaprej določenih spremenljivkah AWK.

Oblika izbire

Možnosti Gawk so lahko tradicionalne enopodne opcije POSIX ali dolge možnosti GNU. Možnosti POSIX se začnejo z enim `` - '', dolge možnosti pa se začnejo z ,, `` ``. Dolge možnosti so na voljo za posamezne funkcije GNU in za funkcije, pooblaščene s POSIX.

Po standardu POSIX se možnosti argumentov, ki so specifične za gawk , dobijo prek argumentov v možnosti -W . Možne so več -W možnosti. Vsaka opcija -W ima ustrezno dolgo možnost, kot je opisano spodaj. Argumenti za dolge možnosti so bodisi združeni z možnostjo z = sign, brez vmesnih presledkov ali pa so navedeni v naslednjem argumentu ukazne vrstice. Dolge možnosti so lahko okrajšane, dokler okrajšava ostane edinstvena.

Opcije

Gawk sprejema naslednje možnosti, navedene abecedno.

-F fs

- field-separator fs Uporabite fs za separator polja vnosa (vrednost prednastavljene spremenljivke FS ).

-v var = val

--assign var = val Določite vrednost val spremenljivki var pred začetkom izvajanja programa. Take spremenljive vrednosti so na voljo za BEGIN blok programa AWK.

-f programska datoteka

--file program-datoteka Preberite programski vir AWK iz datoteke datotečnega programa , namesto iz prvega argumenta ukazne vrstice. Uporabite lahko več -f (ali --file ) možnosti.

-m NNN

-mr NNN Nastavite različne omejitve pomnilnika na vrednost NNN . Zastavica f nastavi največje število polj, r zastavi pa nastavi največjo velikost zapisa. Ti dve zastavici in možnost -m sta iz raziskovalne različice Bell Laboratories UNIX awk . Gawk jih ignorira, saj gawk nima vnaprej določenih meja.

-W compat

- Tradicionalno

- kompatibilnost

--tradijska vožnja v načinu združljivosti . V načinu združljivosti gawk obnaša enako kot UNIX awk ; nobena od razširitev, specifičnih za GNU, ni prepoznana. V drugih oblikah te možnosti je prednostna uporaba - tradicionalna . Več informacij najdete v razdelku GNU EXTENSIONS , spodaj.

-V koplefta

-W avtorskih pravic

- kopija

--copyright Natisnite kratko različico sporočila z informacijami o avtorskih pravicah GNU na standardnem izhodu in izstopite uspešno.

-W dump-variables [ = datoteka ]

--dump-variables [ = datoteka ] Natisnite razvrščeni seznam globalnih spremenljivk, njihovih vrst in končnih vrednosti v datoteko . Če datoteka ni podana, gawk v trenutnem imeniku uporablja datoteko z imenom awkvars.out .

Seznam vseh globalnih spremenljivk je dober način za iskanje tipkarskih napak v svojih programih. To možnost bi uporabili tudi, če imate velik program z veliko funkcijami in želite biti prepričani, da vaše funkcije ne nenamerno uporabljajo globalne spremenljivke, za katere mislite, da so lokalni. (To je še posebej preprosta napaka pri preprostih imenskih spremenljivkah, kot so i , j in tako naprej.)

-V pomoč

-W uporaba

- pomoč

--usage Natisnite relativno kratek povzetek razpoložljivih možnosti na standardnem izhodu. (V skladu z GNU kodirnimi standardi te možnosti povzročijo takojšen, uspešen izhod.)

-V lint [ = usodni ]

--lint [ = usodno ] Navedite opozorila o konstrukcijah, ki so dvomljive ali neprenosljive za druge implementacije AWK. Z neobveznim argumentom s smrtnim izidom so opozorila za linto postala usodne napake. To je lahko drastično, vendar bo njegova uporaba zagotovo spodbudila razvoj čistejših programov AWK.

-Seveda

-lint-old Predložite opozorila o konstruktih, ki niso prenosljivi na prvotno različico Unixa awk .

-V gen-po

--gen-po Skenirajte in razčlenite program AWK in ustvarite datoteko GNU .po na standardnem izhodu z vnosi za vse lokalizirane nizov v programu. Sam program se ne izvaja. Za več informacij o datotekah .po si oglejte distribucijo gesla GNU .

-W brez decimalnih podatkov

--non-decimalni podatki Prepoznajte oktalske in šestnajstiške vrednosti vhodnih podatkov. To možnost uporabite previdno!

-P posix

--posix Vklopi način združljivosti z naslednjimi dodatnimi omejitvami:

*

\ x zaporedja pobiranja niso prepoznana.

*

Samo prostor in tab delujejo kot ločilniki polj, ko je FS nastavljen na en prostor, nova linija ne.

*

Ne morete nadaljevati vrstic po ? in :.

*

Funkcija sinonim za funkcijo ključne besede ni prepoznana.

*

Operaterji ** in ** = ni mogoče uporabiti namesto ^ in ^ = .

*

Funkcija fflush () ni na voljo.

-W profil [ = prof_file ]

--profile [ = prof_file ] Pošlji profilne podatke prof_file . Privzeta vrednost je awkprof.out . Ko je zagnan z gawk , je profil le "precej natisnjena" različica programa. Ko se zažene s pgawk , profil vsebuje število izvedb vsake stavke v programu v levem robu in število funkcijskih klicev za vsako uporabniško definirano funkcijo.

- Ponovni interval

--re-interval Omogočite uporabo izrazov intervala v primerjavi z regularnim izrazom (glejte Regular Expressions , spodaj). Intervalni izrazi tradicionalno niso bili na voljo v jeziku AWK. Standard POSIX jih je dodal, da bi awk in egrep uskladili med seboj. Vendar pa je njihova uporaba verjetno prekinila stare programe AWK, zato jih gawk predloži samo, če jih zahtevajo s to možnostjo ali ko je določena --posix .

-W izvorni program-besedilo

--source program-besedilo Uporabite programsko besedilo kot izvorno kodo programa AWK. Ta možnost omogoča preprosto prepletanje funkcij knjižnice (ki se uporabljajo prek možnosti -f in -file ) z izvorno kodo, vneseno v ukazni vrstici. Namenjen je predvsem srednje velikim in velikim programom AWK, ki se uporabljajo v lupinskih skriptah.

-W različica

--version Informacije o različici tiskanja za to posebno kopijo gamke na standardnem izhodu. To je uporabno predvsem za vedenje, ali je trenutna kopija gawk v vašem sistemu posodobljena glede na katero koli vsebino Fundacije za prosto programje. To je koristno tudi pri poročanju hroščev. (V skladu z GNU kodirnimi standardi te možnosti povzročijo takojšen, uspešen izhod.)

- Potrdite konec možnosti. To je koristno, če lahko samemu programu AWK dovolite dodatne argumente, da se začnejo s »-« ». To je predvsem v skladu s konceptom razčlenjevanja konvencije, ki jo uporablja večina drugih POSIX programov.

V načinu združljivosti so vse druge možnosti označene kot neveljavne, vendar se jih sicer zanemari. Pri normalnem delovanju, dokler je programsko besedilo dostavljeno, se neznane možnosti prenesejo v program AWK v array ARGV za obdelavo. To je še posebej uporabno za izvajanje AWK programov prek mehanizma "#!" Izvršnega tolmača.

IZVRŠEVANJE PROGRAMA AWK

Program AWK je sestavljen iz zaporedja izjave vzorec in opcijskih definicij funkcij.

vzorec { dejanja }

ime funkcije ( seznam parametrov ) { stavki }

Gawk najprej prebere vir programa iz programskih datotek, če je to določeno, iz argumentov na --source ali iz prvega neuporabnega argumenta v ukazni vrstici. Možnosti -f in -source se lahko večkrat uporabijo v ukazni vrstici. Gawk bere programsko besedilo, kot da bi bila vsa programska datoteka in izvorna besedila ukazne vrstice združena skupaj. To je uporabno za gradnjo knjižnic funkcij AWK, ne da bi jih morali vključiti v vsak nov program AWK, ki jih uporablja. Omogoča tudi zmožnost mešanja knjižničnih funkcij z programi v ukazni vrstici.

Spremenljivka okolja AWKPATH podaja iskalno pot, ki jo lahko uporabite pri iskanju izvornih datotek z imenom -f . Če ta spremenljivka ne obstaja, je privzeta pot ".: / Usr / local / share / awk" . (Dejanski imenik se lahko razlikuje, odvisno od tega, kako je bil gawk zgrajen in nameščen.) Če ime datoteke, ki je podano v možnosti -f , vsebuje znak "/", se ne izvaja iskanje poti.

Gawk izvaja programe AWK po naslednjem vrstnem redu. Najprej se izvedejo vse spremenljive naloge, ki so podane z opcijo -v . Nato gawk prevede program v notranjo obliko. Nato gawk izvede kodo v blokih BEGIN (če obstaja) in nato nadaljuje z branjem vsake datoteke, ki je navedena v armaturi ARGV . Če v ukazni vrstici ni nobenih datotek, gawk bere standardni vhod.

Če ima ime datoteke v ukazni vrstici obliko var = val , se obravnava kot določitev spremenljivke. Spremenljivki var se dodeli vrednost val . (To se zgodi, ko so zagnani kateri koli BEGIN bloki.) Dodelitev spremenljivke ukazne vrstice je najbolj uporabna za dinamično dodeljevanje vrednosti spremenljivkam, ki jih uporablja AWK, da bi nadzirali, kako je vhod razdeljen v polja in zapise. Prav tako je uporabno za nadzorovanje stanja, če je potrebnih več prehodov v posamezni podatkovni datoteki.

Če je vrednost določenega elementa ARGV prazna ( "" ), gawk preskoči nad njim.

Za vsak zapis v vnosu gawk preizkuša, ali se ujema z vzorcem v programu AWK. Za vsak vzorec, ki se zapisa ujema, se izvede pridruženo dejanje . Vzorec se testira po vrstnem redu, ki se pojavi v programu.

Nazadnje, po tem, ko je vhod izčrpan, gawk izvrši kodo v blokih END (če obstaja).

Spremenljivke, zapisi in polja

AWK spremenljivke so dinamične; nastanejo, ko so prvič uporabljeni. Njihove vrednosti so bodisi plavajoče točke ali nizi ali oboje, odvisno od tega, kako se uporabljajo. AWK ima tudi en dimenzijske matrike; Nizi z več dimenzijami se lahko simulirajo. Vnaprej določeni spremenljivki so nastavljeni kot programski programi; ti bodo opisani kot potrebni in povzeti v nadaljevanju.

Zapisi

Običajno so zapisi ločeni z znaki nove črte. Lahko nadzirate, kako so zapisi ločeni z dodeljevanjem vrednosti vgrajeni spremenljivki RS . Če je RS poljuben znak, ta znak ločuje zapise. V nasprotnem primeru je RS reden izraz. Besedilo v vnosu, ki se ujema s tem regularnim izrazom, ločuje zapis. Vendar se v načinu združljivosti uporablja samo za ločevanje zapisov. Če je RS nastavljen na ničelni niz, so zapisi ločeni s praznimi črtami. Ko je RS nastavljen na ničelni niz, znak nove črte vedno deluje kot ločilo polj, poleg katere koli vrednosti, ki jo ima FS .

Polja

Ko se vsak vhodni zapis prebere, gawk razdeli zapis v polja , pri čemer vrednost spremenljivke FS kot ločilnika polja. Če je FS en sam znak, so polja ločena s tem znakom. Če je FS ničelni niz, potem vsak posamezen znak postane ločeno polje. V nasprotnem primeru se pričakuje, da bo FS popolnoma reden izraz. V posebnem primeru, ko je FS en sam prostor, so polja ločena s potezami prostorov in / ali kartic in / ali novih linij. (Ampak glej razpravo o --posix , spodaj). OPOMBA: Vrednost IGNORECASE (glej spodaj) vpliva tudi na to, kako so polja razdeljena, kadar je FS regularen izraz in kako so zapisi ločeni, če je RS regularen izraz.

Če je spremenljivka FIELDWIDTHS nastavljena na seznam, ki je ločen s presledki, se vsako polje pričakuje, da bo imelo fiksno širino, gawk pa razdeli zapis s pomočjo določenih širin. Vrednost FS se ne upošteva. Določitev nove vrednosti FS preglasi uporabo FIELDWIDTHS in ponastavi privzeto obnašanje.

Vsako polje v vhodnem zapisu se lahko sklicuje na njegov položaj, $ 1 , $ 2 in tako naprej. $ 0 je celoten zapis. Konstanti ne smejo navajati polj:

n = 5
natisni $ n

natisne peto polje v vhodnem zapisu.

Spremenljivka NF je nastavljena na skupno število polj v vhodnem zapisu.

Sklici na neobstoječa polja (tj. Polja po $ NF ) ustvarijo ničelni niz. Vendar pa dodelitev neobstoječem polju (npr. $ (NF + 2) = 5 ) poveča vrednost NF , ustvari poljubna interna polja z ničelnim nizom kot njihovo vrednostjo in povzroči, da se vrednost 0 ponovno izračuna, pri čemer polja so ločena z vrednostjo OFS . Sklici na negativna oštevilčena polja povzročajo usodno napako. Zmanjšanje NF povzroči izgubo vrednosti polj, ki presegajo novo vrednost, in vrednost 0, ki jo je treba ponovno presoditi, pri čemer so polja ločena z vrednostjo OFS .

Dodeljevanje vrednosti obstoječemu polju povzroči, da se celotni zapis obnovi, ko se navede $ 0 . Podobno dodelitev vrednosti v vrednost 0 $ povzroči, da se zapis razreže, pri čemer ustvarite nove vrednosti za polja.

Vgrajene spremenljivke

Vgrajene spremenljivke Gawk so:

ARGC

Število argumentov ukazne vrstice (ne vključuje možnosti za gawk ali programski vir).

ARGIND

Indeks v ARGV trenutne datoteke, ki se obdeluje.

ARGV

Array argumentov ukazne vrstice. Matrika je indeksirana od 0 do ARGC - 1. Dinamično spreminjanje vsebine ARGV lahko nadzoruje datoteke, ki se uporabljajo za podatke.

BINMODE

V sistemih, ki niso POSIX, je določena uporaba "binarnega" načina za vse datoteke I / O. Številčne vrednosti 1, 2 ali 3 določajo, da morajo vhodne datoteke, izhodne datoteke ali vse datoteke uporabljati binarni vhod / izhod. Vrednosti vrednosti "r" ali "w" določajo, da morajo vhodne datoteke ali izhodne datoteke uporabiti binarni vhod / izhod. Vrednosti vrednosti "rw" ali "wr" določajo, da morajo vse datoteke uporabljati binarni vhod / izhod. Vsaka druga nizna vrednost se obravnava kot "rw" , vendar ustvari opozorilno sporočilo.

CONVFMT

Format pretvorbe za številke, "% .6g" , privzeto.

ENVIRON

Matrika, ki vsebuje vrednosti trenutnega okolja. Matrika je indeksirana s spremenljivkami okolja, pri čemer je vsak element vrednost te spremenljivke (npr. ENVIRON ["HOME"] je lahko / home / arnold ). Spreminjanje te matrike ne vpliva na okolje, ki ga vidijo programi, ki se gawk sprosti prek preusmeritve ali funkcije sistema () .

ERRNO

Če se pojavi sistemska napaka, naredi preusmeritev za getline , med branjem za getline ali med zapiranjem () , potem ERRNO vsebuje niz, ki opisuje napako. Vrednost je predmet prevajanja v nealgijskih krajih.

POLOŽAJ

Seznam poljskih širin, ki je ločen od belega prostora. Ko je nastavljen, gawk analizira vhod v polja fiksne širine, namesto da uporabi vrednost spremenljivke FS kot ločilnika polja.

IME DATOTEKE

Ime trenutne vhodne datoteke. Če v ukazni vrstici niso podane nobene datoteke, je vrednost FILENAME `` - ''. Vendar pa je FILENAME nedefiniran znotraj bloka BEGIN (razen če ga določite z getline ).

FNR

Vhodna številka zapisa v trenutni vhodni datoteki.

FS

Razdelilnik vnosnega polja, privzeti prostor. Glej polja zgoraj.

IGNORECASE

Nadzira čustveno občutljivost vseh regularnih izrazov in nizov operacij. Če ima IGNORECASE vrednost, ki ni nič, se primerjave nizov in ujemanje vzorcev v pravilih, delitev polja s FS , zapis ločuje z RS , regularni izraz, ki se ujema s ~ in ! ~ In gensub () , gsub () , index () , match () , split () in sub () vgrajene funkcije vse ignorirajo primer pri izvajanju regularnih izraznih operacij. OPOMBA: Podpisovanje na matriko ne vpliva in ni funkcija asort () .

Če torej IGNORECASE ni enak nič, se / aB / ujema z vsemi nizi "ab" , "aB" , "Ab" in "AB" . Kot pri vseh spremenljivkah AWK je začetna vrednost IGNORECASE nič, tako da so vsi regularni izrazi in nizi operacij običajno občutljivi na velikost črk. V Unixu se pri ignoriranju primera uporablja celoten niz znakov ISO 8859-1 Latin-1.

LINT

Zagotavlja dinamičen nadzor nad možnostjo -lint iz programa AWK. Ko je resnično, gawk natisne opozorila za lint. Ko je napačen, ne. Ko je vrednost niza "usodna" dodeljena, opozorila linta postanejo usodne napake, enako kot -lint = smrtno . Vsaka druga resnična vrednost natisne opozorila.

NF

Število polj v trenutnem vhodnem zapisu.

NR

Skupno število dosedanjih dosedanjih vnosov.

OFMT

Izhodna oblika za številke, "% .6g" , privzeto.

OFS

Izhodni separator polja, privzeti prostor.

ORS

Izhodni zapis ločitelja, privzeto novo linijo.

PROCINFO

Elementi te matrike omogočajo dostop do informacij o tekočem AWK programu. V nekaterih sistemih so morda elementi v matriki, "group1" pa "group n " za nekaj n , kar je število dodatnih skupin, ki jih ima proces. Za testiranje teh elementov uporabite operaterja v operaterju. Zagotovljeni bodo naslednji elementi:

PROCINFO ["egid"]

vrednost sistema sistema getegid (2).

PROCINFO ["euid"]

vrednost sistemskega klica geteuid (2).

PROCINFO ["FS"]

"FS", če je dejansko delitev polja s FS ali "FIELDWIDTHS", če je delitev polja s FIELDWIDTHS v veljavi.

PROCINFO ["gid"]

vrednost sistemskega klica za sistem getgid (2).

PROCINFO ["pgrpid"]

ID skupine procesov trenutnega postopka.

PROCINFO ["pid"]

ID procesa trenutnega procesa.

PROCINFO ["ppid"]

ID nadrejenega postopka trenutnega postopka.

PROCINFO ["uid"]

vrednost sistema callout (2).

RS

Vhodni zapis ločevalnika, privzeto novo linijo.

RT

Zapisnik terminatorja. Gawk nastavi RT na vhodno besedilo, ki ustreza znaku ali regularnemu izrazu, ki ga je določil RS .

RSTART

Indeks prvega znaka, ki se ujema z ujemanjem () ; 0, če ni zadetka. (To pomeni, da se kazalci znakov začnejo pri eni.)

RLENGTH

Dolžina niza, ki se ujema z ujemanjem () ; -1, če se ne ujema.

SUBSEP

Znak, ki se uporablja za ločevanje več indeksov v elementih matrike, privzeto "\ 034" .

TEXTDOMAIN

Besedilna domena programa AWK; se uporabljajo za iskanje lokaliziranih prevodov za nize programa.

Nizi

Nizi so indeksirani z izrazom med oglatimi oklepaji ( [ in ] ). Če je izraz izrazni seznam ( expr , expr ...), je podvrzica matrike niz, ki sestoji iz združitve (niza) vrednosti vsakega izraza, ločenega z vrednostjo spremenljivke SUBSEP . Ta objekt se uporablja za simulacijo večplastno razporejenih nizov. Na primer:

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

dodeljuje niz "zdravo, svet \ n" elementu matrike x, ki je indeksiran z nizom "A \ 034B \ 034C" . Vsi nizi v AWK so asociativni, tj indeksirani z vrednostmi nizov.

Posebni operater v lahko uporabite v stavku if ali while, da vidite, ali ima matrika indeks, sestavljen iz določene vrednosti.

če (val v matriki) tiskana matrika [val]

Če ima matrika več indeksov, uporabite (i, j) v matriki .

V konstruktu se lahko uporabi tudi za zanko, da se preteče nad vsemi elementi matrike.

Element se lahko izbriše iz polja z uporabo stavka za brisanje . Izjava o izbrisu se lahko uporablja tudi za brisanje celotne vsebine matrike, samo tako, da navedete ime matrike brez podvrsta.

Spremenljivka tipkanja in preusmeritev

Spremenljivke in polja so lahko (plavajoče) številke ali nizi ali oboje. Kako je razlaga vrednost spremenljivke odvisna od njenega konteksta. Če se uporablja v numeričnem izrazu, se bo obravnaval kot število, če se bo uporabil kot niz, se bo obravnaval kot niz.

Če želite spremenljivko spremeniti za številko, ji dodajte 0; da ga je treba obravnavati kot niz, jo združiti z ničelnim nizom.

Ko je niz pretvorjen v številko, se pretvorba izvede s strtodom (3). Številka se pretvori v niz z uporabo vrednosti CONVFMT kot niza formatov za sprintf (3), s številsko vrednostjo spremenljivke kot argumentom. Čeprav so vse številke v AWK plavajoče točke, se integralne vrednosti vedno pretvorijo kot celo število. Tako, podano

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

spremenljivka b ima nizno vrednost "12" in ne "12,00" .

Gawk opravi primerjave, kot sledi: Če sta dve spremenljivki numerični, jih numerično primerjata. Če je ena vrednost numerična in druga ima nizno vrednost, ki je "numerični niz", se primerjave opravijo tudi številčno. V nasprotnem primeru se numerična vrednost pretvori v niz in opravi se primerjava nizov. Dve nizi se seveda primerjajo kot strune. Upoštevajte, da standard POSIX uporablja koncept `` numeričnega niza '' povsod, tudi za konstante nizov. Vendar je to očitno napačno in gawk to ne naredi. (Na srečo je to določeno v naslednji različici standarda.)

Upoštevajte, da niz konstant, kot je "57" , niso numerični nizi, so konstante nizov. Ideja o »numeričnem nizu« velja le za polja, elemente za vhodne linije , elemente FILENAME , ARGV, elemente ENVIRON in elemente matrike, ki jih ustvarijo split (), ki so številčni nizi. Osnovna ideja je, da je treba uporabniški vhod in samo uporabniški vhod, ki je videti številčno, obravnavati tako.

Neinicializirane spremenljivke imajo številsko vrednost 0 in vrednost niza "" (ničlo ali prazno, niz).

Octal in hexadecimal Constants

Začenši z različico 3.1 gawk, lahko v izvorni kodi programa AWK uporabljate osmične in šestnajstiške konstante C-style. Na primer, oktalna vrednost 011 je enaka decimalnim številom 9 in šestnajstiška vrednost 0x11 je enaka decimalnim številom 17.

String Constants

Konstante nizov v AWK so zaporedja znakov, zaprtih med dvojnimi narekovaji ( " ). V okviru nizov so prepoznane določene izhodne sekvence , kot v C. To so:

\\

Dobesedno poševnico.

\ a

"Opozorilni" znak; običajno znak ASCII BEL.

\ b

backspace.

\ f

obrazec za krmo.

\ n

nova linija.

\ r

povratni voziček.

\ t

horizontalni jeziček.

\ v

navpični zavihek.

\ x šestnajst števk

Znak, ki ga predstavlja niz šestnajstiških številk po \ x . Tako kot v ANSIC-u, so vse naslednje šestnajstiške števke obravnavane kot del zaporedja pobega. (Ta funkcija nam pove nekaj o oblikovanju jezika s strani odbora.) Npr., \ X1B je ASCIIESC (escape) znak.

\ ddd

Znak, ki ga predstavlja 1-, 2- ali 3-mestno zaporedje osmih številk. Npr., \ 033 je ASCII ESC (escape) znak.

\ c

Dobesedni znak c .

Zapore pobega se lahko uporabijo tudi v stalnih regularnih izrazih (npr. / [\ T \ f \ n \ r \ v] / ujemanju praznih znakov).

V načinu združljivosti se znaki, ki jih predstavljata oktalna in šestnajstiška izhodna zaporedja, obravnavata dobesedno, kadar se uporabljajo v regularnih izraznih konstantah. Tako je / a \ 52b / enakovredno / a \ * b / .

Patterns and Actions

AWK je linijsko usmerjen jezik. Vzorec nastopi najprej in nato akcijo. Izjave o dejanju so priložene { in } . Ali vzorec morda manjka ali pa morda manjka ukrep, vendar seveda ne oboje. Če vzorec manjka, se dejanje izvaja za vsak posamezen zapis vnosa. Manjka ukrepanje je enakovredno

{print}

ki natisne celoten zapis.

Komentarji se začnejo s znakom "#" in nadaljujejo do konca vrstice. Prazne črte se lahko uporabijo za ločevanje izjav. Običajno se izjava konča z novo linijo, vendar to ne velja za vrstice, ki se končajo s »,« », { , ? , : ,, && , ali || . Vrstice, ki se končajo , ali pa se tudi njihove izjave samodejno nadaljujejo v naslednji vrstici. V drugih primerih se lahko črta nadaljuje tako, da se konča s ', v tem primeru se nova linija ne upošteva.

Več stavkov se lahko doda na eno vrstico tako, da jih ločite s "`; "". To velja za oba izraza v delovnem delu vzorca-akcijski par (običajni primer) in za izjave o vzoru vzorec.

Patterns

AWK vzorci so lahko eden od naslednjih:

BEGIN END / regularni izraz / vzorec relacijskega izražanja & vzorec vzorca || vzorec vzorca ? vzorec : vzorec ( vzorec ) ! vzorec vzorca1 , vzorec2

BEGIN in END sta dve posebni vrsti vzorcev, ki se ne testirajo glede na vnos. Dejavni deli vseh BEGIN vzorcev se združijo, kot da bi bili vsi izpiski napisani v enem bregu BEGIN . Izvedejo se pred branjem katerega koli vhoda. Podobno se vsi bloki END združijo in izvedejo, ko se izčrpa celoten vnos (ali ko se izvede izpisek za izstop ). BEGIN in END vzorcev ni mogoče kombinirati z drugimi vzorci v vzorčnih izrazih. Vzorci BEGIN in END ne morejo manjkajoči deli delovanja.

Za / regularni izraz / vzorci se povezana izjava izvede za vsak vhodni zapis, ki se ujema z regularnim izrazom. Redni izrazi so enaki kot v egrep (1) in so povzeti spodaj.

Relacijski izraz lahko uporablja katero koli od operaterjev, opredeljenih spodaj, v delu o ukrepih. Na splošno preverjajo, ali nekatera polja ustrezajo določenim regularnim izrazom.

&& , || , in ! operaterji so logični IN, logični OR in logični NOT, enako kot v C. Izvajajo se kratkoročno ocenjevanje, prav tako kot v C, in se uporabljajo za kombiniranje bolj primitivnih izrazov. Kot v večini jezikov se lahko oklepaji uporabijo za spremembo vrstnega reda ocenjevanja.

Operater ?: Je podoben istemu operatorju v C. Če je prvi vzorec resničen, je vzorec, uporabljen za preizkušanje, drugi vzorec, drugače je tretji. Ocenjen je le eden od drugega in tretjega vzorca.

Obrazec pattern1 , pattern2 izraza se imenuje vzorčni niz . Ujema se z vsemi vhodnimi zapisi, ki se začnejo z zapisom, ki se ujema z vzorcem1 , in nadaljuje do zapisa, ki se ujema z vzorec2 . Ne združuje se z nobenim drugim vzorcem.

Redni izrazi

Redni izrazi so razširjene vrste, ki jih najdemo v egrep . Sestavljene so iz znakov, kot sledi:

c

se ujema z non-metacharacter c .

\ c

se ujema z dobesednim znakom c .

.

se ujema z vsemi znaki, vključno z novo linijo.

^

se ujema z začetkom niza.

$

se ujema s koncem niza.

[ abc ... ]

seznam znakov, se ujema z vsemi znaki abc ....

[^ abc ... ]

negiran seznam znakov, se ujema z vsemi znaki razen abc ....

r1 | r2

izmenjava: se ujema z r1 ali r2 .

r1r2

združitev: se ujema z r1 , nato pa r2 .

r +

se ujema z enim ali več r .

r *

ujema nič ali več r .

r ?

ujema ničlo ali eno r .

( r )

združevanje: uje r .

r { n }

r { n ,}

r { n , m } Ena ali dve števili znotraj zavihkov označujeta intervalni izraz . Če je v oklepajih ena številka, se prejšnji regularni izraz r ponovi nkrat . Če sta dve vejici ločeni z vejico, se r ponovi n do m krat. Če je ena številka, ki ji sledi vejica, se r ponovi vsaj nkrat .

Intervalni izrazi so na voljo le, če sta v ukazni vrstici podan --posix ali --re-interval .

\ y

se ujema z praznim nizom na začetku ali koncu besede.

\ B

se ujema s praznim nizom znotraj besede.

\ <

se ujema s praznim nizom na začetku besede.

\>

se ujema s praznim nizom na koncu besede.

\ w

se ujema z vsemi besednimi sestavinami (črka, števka ali podčrtava).

\ W

se ujema z vsemi znaki, ki niso sestavine besed.

\ `

se ujema s praznim nizom na začetku pufra (niz).

\ '

se ujema s praznim nizom na koncu vmesnega pomnilnika.

Zaporedna izhodišča, ki veljajo v konstantah nizov (glej spodaj), veljajo tudi v regularnih izrazih.

Znaki razredov so nova funkcija, uvedena v standardu POSIX. Razred znakov je posebna oznaka za opis seznama znakov, ki imajo določen atribut, vendar se dejanski znaki lahko razlikujejo od države do države in / ali od znaka do nabora znakov. Na primer, pojem abecednega značaja se razlikuje v ZDA in Franciji.

Razred znakov je veljaven le v navadnem izrazu v oklepajih seznama znakov. Razred znakov sestavljajo [: , ključna beseda, ki označuje razred, in :] . Razredi znakov, ki jih določa standard POSIX, so:

[: alnum:]

Alfanumerični znaki.

[: alfa:]

Abecedni znaki.

[: prazno:]

Znaki vesolja ali kartice.

[: cntrl:]

Kontrolni znaki.

[: številka:]

Številčni znaki.

[: graf:]

Znaki, ki so tiskljivi in ​​vidni. (Prostor se lahko natisne, vendar ni viden, medtem ko je a oba.)

[: nižje:]

Spodnji abecedni znaki.

[: natisni:]

Znaki, ki jih je mogoče natisniti (znake, ki niso kontrolni znaki.)

[: punct:]

Znaki interpunkcije (znaki, ki niso črka, števke, kontrolni znaki ali znaki za presledek).

[: prostor:]

Znaki vesolja (na primer prostor, jeziček in obrazec, da navedete nekaj).

[: zgornji:]

Zgornji črki abecednih znakov.

[: xdigit:]

Znaki, ki so šestnajstiški znaki.

Na primer, pred standardom POSIX bi se morali ujemati z alfanumeričnimi znaki / [A-Za-z0-9] / . Če je v vašem znakovnem nizu bilo drugih abecednih znakov, se to ne bi ujemalo z njimi in če je vaš znak znakov drugačen od ASCII, se to morda ne bo ujemalo tudi z alfanumeričnimi znaki ASCII. Z razredi znakov POSIX lahko napišete / [[: alnum:]] / , kar se ujema z abecednimi in številskimi znaki v vašem nizu znakov.

Na seznamu znakov se lahko pojavita še dve posebni zaporedji. Te veljajo za nabore znakov brez ASCII, ki imajo lahko en sam simbol (imenovani elementi za zbiranje ), ki so predstavljeni z več kot enim znakovom, in več znakov, ki so enakovredni za primerjanje ali razvrščanje. (Npr. V francoščini sta ravno "e" in groba naglašena e "enakovredna.)

Združevanje simbolov

Simbol za zbiranje je večnamenski element za zbiranje podatkov, ki je priložen v [. in .] . Če je ch na primer primerjalni element, je [[.ch.]] Regularni izraz, ki se ujema s tem primerjalnim elementom, medtem ko je [ch] regularni izraz, ki se ujema s c ali h .

Enakovredni razredi

Enakovreden razred je ime, specifično za jezik, za seznam znakov, ki so enakovredni. Ime je zaprto v [= in =] . Na primer, ime e se lahko uporabi za predstavitev vseh "e", "e", "" in "e". V tem primeru je [[= e =]] regularen izraz, ki se ujema z vsemi e , e ' ali e` .

Te funkcije so zelo dragocene v ne-angleško govorečih krajih. Funkcije knjižnice, ki jih gawk uporablja za ujemanje regularnega izraza, trenutno priznavajo le razrede znakov POSIX; ne prepoznajo simbolov za primerjanje ali razredov enakovrednosti.

Operaterji \ y , \ B , \ < , \> , \ w , \ W , \ ` in \ ' so specifični za gawk ; gre za razširitve, ki temeljijo na objektih v knjižnicah GNU regularnega izraza.

Različne možnosti ukazne vrstice nadzorujejo, kako gawk interpretira znake v regularnih izrazih.

Ni možnosti

V privzetem primeru gawk zagotavlja vse možnosti POSIX regularnih izrazov in operaterjev regularnega izrazaGNU, opisanih zgoraj. Vendar pa izrazi intervala niso podprte.

- posek

Podprti so le regularni izrazi POSIX, operaterji GNU niso posebni. (Npr, \ w ustreza literal w ). Intervalni izrazi so dovoljeni.

- tradicionalno

Tradicionalni regularni izrazi Unix awk se ujemajo. Operaterji GNU niso posebni, intervalni izrazi niso na voljo, niti razredi znakov POSIX ( [[: alnum:]] in tako naprej). Znaki, opisani z oktalnimi in heksadecimalnimi zaporedji za izogibanje, se obravnavajo dobesedno, tudi če predstavljajo metacharacters regularnega izraza.

-re-interval

Dovoli intervalne izraze v regularnih izrazih, tudi če je zagotovljeno - tradicionalno .

Akcije

Izjave o dejanju so v oklepajih, { in } . Izjave o dejanju so običajne izjave o dodelitvi, pogojni in zanki, ki jih najdemo v večini jezikov. Na voljo so operatorji, kontrolni stavki in vhodno / izhodni izjavi po tistih v C.

Operaterji

Operaterji v AWK so po padajočem prednostnem vrstnem redu

( ... )

Združevanje

$

Referenčno polje.

++ -

Povečanje in zmanjšanje, tako predpono kot postfix.

^

Izkoriščanje ( ** se lahko uporabi tudi, in ** = za operaterja dodelitve).

+ -!

Unary plus, unary minus in logical negation.

* /%

Razmnoževanje, delitev in modul.

+ -

Dodajanje in odštevanje.

prostor

Konkreten niz.

<>

<=> =

! = == Redni relacijski operaterji.

~! ~

Ujemanje regularnega izraza, negirano ujemanje. OPOMBA: Ne uporabljajte konstantnega regularnega izraza ( / foo / ) na levi strani ~ ali ! ~ . Uporabite samo eno na desni strani. Izraz / foo / ~ exp ima enak pomen kot (($ 0 ~ / foo /) ~ exp ) . To običajno ni tisto, kar je bilo namenjeno.

v

Članstvo v matriki.

&&

Logično IN.

||

Logično ALI.

?:

Pogojni izraz C. To je oblika expr1 ? expr2 : expr3 . Če je expr1 res, je vrednost izraza expr2 , sicer je expr3 . Ocenjuje se samo ena od izpisov expr2 in expr3 .

= + = - =

* = / =% = ^ = Dodelitev. Podprta sta absolutna dodelitev ( var = vrednost ) in dodelitev operaterja (druge oblike).

Kontrolne izjave

Kontrolni izkazi so naslednji:

if ( condition ) statement [ else statement ], medtem ko ( condition ) statement naredi izjavo, medtem ko ( pogoj ) za ( expr1 ; expr2 ; expr3 ) izjavo za ( var in array ) izjavo break nadaljuj brisanje array [ index ] delete array exit [ izraz ] izjave }

Izjave I / O

Vhodni / izhodni izpiski so naslednji:

Zapri ( datoteka [ , kako ] )

Zapri datoteko, cev ali so-proces. Neobvezno, kako je treba uporabiti samo pri zapiranju enega konca dvosmerne cevi na postopek. To mora biti nizna vrednost, bodisi "do" ali "od" .

getline

Nastavite $ 0 iz naslednjega vhodnega zapisa; nastavite NF , NR , FNR .

getline < datoteka

Nastavite $ 0 iz naslednjega zapisa datoteke ; nastavite NF .

getline var

Nastavite var od naslednjega vhodnega zapisa; nastavite NR , FNR .

getline var < datoteka

Nastavite var od naslednjega zapisa datoteke .

ukaz | getline [ var ]

Z ukazom zaženite ukaz, da izberete izhod v $ 0 ali var , kot je opisano zgoraj.

ukaz | & getline [ var ]

Zaženite ukaz kot skupni proces, s katerim izberete izhod v $ 0 ali var , kot je opisano zgoraj. So-procesi so gawk podaljšek.

Naslednji

Zaustavite obdelavo trenutnega vhodnega zapisa. Naslednji vhodni zapis se prebere in obdelava se začne s prvim vzorcem v programu AWK. Če je dosežen konec vhodnih podatkov, se izvedejo bloki END , če obstajajo.

naslednjo datoteko

Zaustavite obdelavo trenutne vhodne datoteke. Naslednji vnos vhodnega zapisa prihaja iz naslednje vhodne datoteke. FILENAME in ARGIND se posodobita, FNR se ponastavi na 1, obdelava pa se začne s prvim vzorcem v programu AWK. Če je dosežen konec vhodnih podatkov, se izvedejo bloki END , če obstajajo.

natisnite

Natisne trenutni zapis. Izhodni zapis se zaključi z vrednostjo spremenljivke ORS .

natisni expr-list

Natisne izraze. Vsak izraz je ločen z vrednostjo spremenljivke OFS . Izhodni zapis se zaključi z vrednostjo spremenljivke ORS .

print expr-list > datoteko

Natisne izraze v datoteki . Vsak izraz je ločen z vrednostjo spremenljivke OFS . Izhodni zapis se zaključi z vrednostjo spremenljivke ORS .

printf fmt, expr-list

Oblikujte in natisnite.

printf fmt, expr-list > datoteko

Oblikujte in natisnite datoteko .

sistem ( cmd-line )

Izvedite ukaz cmd-line in vrnite stanje izhoda. (To morda ni na voljo v sistemih, ki niso POSIX.)

fflush ( [ datoteka ] )

Izpustite vse odbojnike, povezane z odprto izhodno datoteko ali cevno datoteko . Če datoteka manjka, se standardni izhod izprazni. Če je datoteka null niz, potem so vse odprte izhodne datoteke in cevi poplavljene.

Dodatna preusmerjanja so dovoljena za tiskanje in printf .

natisni ... >> datoteko

dodaja izhod v datoteko .

natisni ... | ukaz

piše na cevi.

natisni ... | in ukaz

pošlje podatke v skupni proces.

Ukaz getline vrne 0 na konec datoteke in -1 na napako. ERRNO ob napaki vsebuje niz, ki opisuje težavo.

OPOMBA: Če uporabljate cev ali ko-proces za pridobivanje linije ali tiskanje ali tiskanje v zanki, morate uporabiti zaprto () za ustvarjanje novih primerkov ukaza. AWK samodejno ne zapira cevi ali sodeluje pri vrnitvi EOF.

Izjava printf

Različice AWK izjave printf in funkcije sprintf () (glejte spodaj) sprejemajo naslednje formate specifikacije pretvorbe:

% c

Znak ASCII. Če je argument, uporabljen za % c , številčen, se obravnava kot znak in natisne. V nasprotnem primeru se predpostavlja, da je argument niz, in natisnjen je le prvi znak tega niza.

% d , % i

Decimalna številka (celotni del).

% e,% E

Številka s plavajočo vejico oblike [-] d.dddddde [+ -] dd . Oblika % E uporablja E namesto e .

% f

Številka s plavajočo vejico obrazca [-] ddd.dddddd .

% g,% G

Uporabite pretvorbo % e ali % f , kar je krajše, pri čemer se neusklajene ničle zatisnejo. Oblika % G uporablja % E namesto % e .

% o

Neznačena oktalna številka (tudi celo število).

% u Neocenjena decimalna številka (znova, celo število).

% s

Niz znakov.

% x,% X

Šestnajstiško število, ki je nepodpisano (celo število). Format % X uporablja ABCDEF namesto abcdef .

%%

En znak % ; noben argument ni pretvorjen.

Neobvezno, so lahko dodatni parametri med % in kontrolno črko:

št. $

Na tej točki v formatiranju uporabite štetje argumenta. To se imenuje pozicijski specifikator in je namenjeno predvsem uporabi v prevedenih različicah niza formatov, ne v izvirnem besedilu programa AWK. To je podaljšek gobca .

-

Izraz mora biti levo upravičen znotraj svojega področja.

prostor

Za številske konverzije prednastavite pozitivne vrednosti s presledkom in negativne vrednosti z znakom minus.

+

Znak plus, ki je bil uporabljen pred modifikatorjem širine (glejte spodaj), pravi, da vedno pošilja znak za številčne konverzije, tudi če so podatki, ki jih je treba oblikovati, pozitivni. Prekriži prostorski modifikator.

#

Za nekatere kontrolne črke uporabite »nadomestni obrazec«. Za % o zagotovite vodilno ničlo. Za % x in % X dobite vodilni 0x ali 0X za ničen rezultat. Za % e , % E in % f , rezultat vedno vsebuje decimalno vejico. Pri % g in % G se iz rezultata ne odstranijo nove ničle.

0

Vodilni 0 (nič) deluje kot zastavica, ki označuje, da je izhod treba namestiti z ničli namesto presledkov. To velja tudi za ne-številčne izhodne formate. Ta zastava ima le učinek, če je širina polja širša od vrednosti, ki jo želite natisniti.

premer

Polje je treba namestiti na to širino. Polje je običajno opremljeno s presledki. Če je bila uporabljena zastavica 0 , je označena z ničli.

. prec

Številka, ki določa natančnost uporabe pri tiskanju. Za oblike % e , % E in % f to določa število številk, ki jih želite natisniti desno od decimalne vejice. Za oblike % g in % G določa največje število znakov. Za oblike % d , % o , % i , % u , % x in % X , določa najmanjše število številk za tiskanje. Za % s določa največje število znakov iz niza, ki ga je treba natisniti.

Podprte so dinamične širine in natančne zmogljivosti rutin ANSI C printf () . * * Namesto širine ali natančnih specifikacij povzroči, da se njihove vrednosti vzamejo s seznama argumentov na printf ali sprintf () . Če želite uporabiti pozicijsko specifično z dinamično širino ali natančnostjo, navedite število $ po * v formatnem nizu. Na primer, "% 3 $ * 2 $. * 1 $ s" .

Posebna imena datotek

Pri preusmeritvi I / O iz tiskalnika ali printf v datoteko ali prek getline iz datoteke, gawk prepozna določena posebna imena datotek znotraj. Ta imena datotek omogočajo dostop do odprtih deskriptorjev datotek, ki so podedovali nad starševskim procesom gawk (običajno lupino). Ta imena datotek se lahko uporabijo tudi v ukazni vrstici za poimenovanje podatkovnih datotek. Filename so:

/ dev / stdin

Standardni vnos.

/ dev / stdout

Standardni izhod.

/ dev / stderr

Standardni izhod napake.

/ dev / fd / n

Datoteka, povezana z deskriptorjem odprtega datoteke n .

To so še posebej uporabne za sporočila o napakah. Na primer:

natisni "Izginil si!" > "/ dev / stderr"

ker bi ga sicer morali uporabiti

natisni "Izginil si!" | "mačka 1> in 2"

Naslednja posebna imena datotek se lahko uporabijo pri operaterju & co-process za ustvarjanje omrežnih povezav TCP / IP.

/ inet / tcp / lport / rhost / rport

Datoteka za povezavo TCP / IP v lokalnih vratih prijavi na oddaljeni gostiteljski rhost na oddaljenem portu rport . Uporabite pristanišče 0, da sistem izbere vrata.

/ inet / udp / lport / rhost / rport

Podobno, vendar uporabite UDP / IP namesto TCP / IP.

/ inet / raw / lport / rhost / rport

Rezervirano za nadaljnjo uporabo.

Druga posebna imena datotek omogočajo dostop do informacij o tekočem gawk procesu. Te datoteke so zdaj zastarele. Za pridobitev informacij, ki jih ponujajo, uporabite matrika PROCINFO . Filename so:

/ dev / pid

Branje te datoteke vrne identifikacijsko številko procesa trenutnega postopka, v decimalnem zaporedju, prekinjeno z novo linijo.

/ dev / ppid

Branje te datoteke vrne matično identifikacijsko številko procesa trenutnega postopka, v decimalnem zaporedju, prekinjeno z novo linijo.

/ dev / pgrpid

Branje te datoteke vrne identifikacijsko skupino procesa trenutnega postopka, v decimalki, zaključeno z novo linijo.

/ dev / uporabnik

Branje te datoteke vrne en zapis, ki se zaključi z novo linijo. Polja so ločena s presledki. $ 1 je vrednost sistemskega klica getuid (2), 2 je vrednost sistemskega klica geteuid (2), 3 je vrednost sistemskega klica getgid (2) in $ 4 je vrednost getegid (2) sistemski klic. Če obstajajo dodatna polja, so to ID-ji skupine, ki jih vrne skupina geskov (2). V večini sistemov ni mogoče podpirati več skupin.

Številske funkcije

AWK ima vgrajene aritmetične funkcije:

atan2 ( y , x )

Vrne arktangent y / x v radianih.

cos ( expr )

Vrne kosinus izraza expr , ki je v radianih.

exp ( expr )

Eksponentna funkcija.

int ( expr )

Skrajša na celo število.

log ( expr )

Funkcija naravnega logaritma.

rand ()

Vrne naključno število med 0 in 1.

sin ( expr )

Vrne sinus izraza expr , ki je v radianih.

sqrt ( expr )

Funkcija kvadratnega korena.

srand ( [ expr ] )

Uporabi expr kot novo seme za generator naključnih števil. Če noben izpis ni naveden, se uporabi čas dneva. Povratna vrednost je prejšnje seme za generator naključnih števil.

Funkcije vrstic

Gawk ima naslednje vgrajene nizske funkcije:

asort ( s [ , d ] )

Vrne število elementov v izvornem nizu s . Vsebine s so razvrščene po običajnih pravilih Gawka za primerjavo vrednosti in indeksi razvrščenih vrednosti s so zamenjani s zaporednimi celi števili, ki se začnejo z 1. Če je izbrana izbirna ciljna matrika d , se s najprej podvoji v d , nato pa je d sortiran, tako da ostanejo indeksi izvorne matrike s nespremenjeni.

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

Poiščite ciljni niz t za zadetke regularnega izraza r . Če je h niz, ki se začne z g ali G , potem zamenjajte vse tekme r s s . V nasprotnem primeru je h številka, ki kaže, katera ujemanje r se nadomesti. Če ni priložen, se namesto tega uporabi 0 . V nadomestnem besedilu s je zaporedje \ n , kjer je n številka od 1 do 9, lahko uporabite za označevanje samo besedila, ki je ujemala n -ti oklepljeno podrazrenje. Zaporedje \ 0 predstavlja celotno ujemajoče besedilo, kot tudi znak & . Za razliko od sub () in gsub () se spremenjeni niz vrne kot rezultat funkcije in prvotni ciljni niz ni spremenjen.

gsub ( r , s [ , t ] )

Za vsak podstavek, ki ustreza regularnemu izrazu r v nizu t , zamenjajte niz s in vrnite število zamenj. Če ni priložen, uporabite $ 0 . & V nadomestnem besedilu se nadomesti z dejansko ujemajočim besedilom. Uporabite \ & in dobili dobesedno & . (To mora biti vneseno kot "\\ &" ; glejte GAWK: Učinkovito AWK programiranje za popolnejšo razpravo o pravilih za & s in poševnice v nadomestnem besedilu pod () , gsub () in gensub () .)

indeks ( s , t )

Vrne indeks niza t v nizu s ali 0, če t ni prisoten. (To pomeni, da se kazalci znakov začnejo pri eni.)

dolžina ( [ s ] )

Vrne dolžino niza s ali dolžino $ 0, če s ni na voljo.

ujemanje ( s , r [ , a ] )

Vrne pozicijo v s, kjer se pojavi regularni izraz r , ali 0, če r ni, in nastavi vrednosti RSTART in RLENGTH . Upoštevajte, da je reda argumentov enaka kot za operaterja: str ~ re . Če je zagotovljena array a, je a izbrisana, nato pa elementi od 1 do n napolnijo z deli s, ki se ujemajo z ustrezno podrazenitvijo pod oklepajem v r . 0-ti element a vsebuje del s, ki ga ujema celoten regularni izraz r .

split ( s , a [ , r ] )

Razdeli niz v matriko a na regularni izraz r in vrne število polj. Če je r izpuščen, se uporablja FS . Matrika a se najprej očisti. Razdelitev se obnaša enako kot delitev polja, opisana zgoraj.

sprintf ( fmt , expr-list )

Natisne expr-seznam glede na fmt in vrne rezultat.

strtonum ( str )

Preučuje str in vrne številčno vrednost. Če se str začne z vodilnim 0 , strtonum () predpostavlja, da je str osmično število. Če se str začne z vodilnim 0x ali 0X , strtonum () predpostavlja, da je str šestnajstiško število.

sub ( r , s [ , t ] )

Enako kot gsub () , vendar se nadomesti samo prvi ujemajoči podniz.

substr ( s , i [ , n ] )

Vrne največ n -karakter substrata za začetek pri i . Če je n izpuščen, se uporabi preostali del s .

tolower ( str )

Vrne kopijo strune strona , pri čemer so vsi znaki velikega števila v str, prevedeni v njihove ustrezne male črke. Nesafetični znaki ostanejo nespremenjeni.

toupper ( str )

Vrne kopijo strune strona , pri čemer so vsi majhni črki v str. Prevedeni v njihove ustrezne zgornje primerke. Nesafetični znaki ostanejo nespremenjeni.

Funkcije časa

Ker ena od primarnih rab AWK programov obdeluje dnevnike, ki vsebujejo podatke o časovnem žigu, gawk ponuja naslednje funkcije za pridobitev časovnih žigov in njihovo oblikovanje.

mktime ( datumpec )

Vrača datumček v časovni žig iste oblike, kot ga je vrnil systime () . Datumpec je niz oblike LLLL MM DD HH MM SS [DST] . Vsebina niza je šest ali sedem številk, ki predstavljata celotno leto, vključno s stoletjem, mesec od 1 do 12, dan v mesecu od 1 do 31, uro dneva od 0 do 23, minuto od 0 do 59, drugi pa od 0 do 60 in dodatno zastavo za poletni čas. Vrednosti teh številk ne smejo biti znotraj določenih razponov; na primer, ura -1 pomeni 1 uro pred polnočjo. Predpostavlja se, da je ničelni gregorijanski koledar z letom 0 pred letom 1 in letom -1 pred letom 0. Predpostavlja se, da je čas v lokalnem časovnem pasu. Če je zastava za poletni čas pozitivna, se šteje, da je čas za poletni čas; če je nič, se šteje, da je čas običajen čas; in če je negativna (privzeto), mktime () poskuša ugotoviti, ali je poletni čas veljaven za določen čas. Če datumček ne vsebuje dovolj elementov ali če je dobljeni čas zunaj dosega, mktime () vrne -1.

strftime ( [ format [ , časovni žig ]] )

Oblika časovnega žiga v skladu s specifikacijo v obliki. Časovni žig mora biti v isti obliki, kot ga je vrnil systime () . Če manjka časovni žig , se uporabi trenutni čas dneva. Če manjka format , se uporabi privzeta oblika, ki ustreza izhodu datuma (1). Oglejte si specifikacijo funkcije strftime () v ANSI C za pretvorbe formatov, za katere je zagotovljeno, da so na voljo. Različica strftime (3) na javni domeni in man stran za to prihajajo z gawk ; če je bila ta različica uporabljena za izdelavo gawk , potem so vse konverzije, opisane na tej strani človeka, na voljo za gawk.

systime ()

Vrne trenutni čas v dnevu kot število sekund po Epohi (1970-01-01 00:00:00 UTC na sistemih POSIX).

Bit Manipulacijske funkcije

Od verzije 3.1 gawk so na voljo naslednje funkcije za manipulacijo z bitami . Delujejo tako, da pretvorijo vrednosti z dvojno natančnostjo s plavajočo vejico na nepojasnjena dolga cela števila, delajo operacijo in nato pretvorijo rezultat nazaj v plavajočo točko. Funkcije so:

in ( v1 , v2 )

Vrnite bitno AND vrednosti, ki jih zagotovita v1 in v2 .

compl ( val )

Vrnite bitno dopolnilo val .

lshift ( val , število )

Vrni vrednost val , ki jo levo pomaknejo števili .

ali ( v1 , v2 )

Vrnite bitno VR vrednosti vrednosti, ki jih določata v1 in v2 .

rshift ( val , število )

Vrni vrednost val , ki se pomakne desno s številom bitov.

xor ( v1 , v2 )

Vnesite vrednost bitov XOR, ki sta določena z v1 in v2 .

Funkcije internacionalizacije

Od verzije 3.1 gawk se lahko v vašem programu AWK uporabijo naslednje funkcije za prevajanje nizov ob času izvajanja. Za vse podrobnosti glejte GAWK: Učinkovito programiranje AWK .

bindtextdomain ( imenik [ , domena ] )

Določa imenik, v katerem gawk išče datoteke .mo , če jih ne bodo ali jih ni mogoče postaviti na »standardne« lokacije (npr. Med testiranjem). Vrne imenik, kjer je domena `` vezana. ''

Privzeta domena je vrednost TEXTDOMAIN . Če je imenik null niz ( "" ), bindtextdomain () vrne trenutno vezavo za določeno domeno .

dcgettext ( string [ , domena [ , kategorija ]] )

Vrne prevod niza v domeni besedilne domene za kategorijo kategorije kategorij . Privzeta vrednost za domeno je trenutna vrednost TEXTDOMAIN . Privzeta vrednost za kategorijo je "LC_MESSAGES" .

Če dobite vrednost za kategorijo , mora biti niz enakovreden eni izmed znanih kategorij kategorij, opisanih v GAWK: Učinkovito programiranje AWK . Predložiti morate tudi besedilno domeno. Če želite uporabiti trenutno domeno, uporabite TEXTDOMAIN .

dcngettext (string1, string2 , številka [ , domena [ , kategorija ]] )

Vrne množinsko obliko, ki se uporablja za število prevodov string1 in string2 v domeni besedilne domene za kategorijo kategorije kategorij . Privzeta vrednost za domeno je trenutna vrednost TEXTDOMAIN . Privzeta vrednost za kategorijo je "LC_MESSAGES" .

Če dobite vrednost za kategorijo , mora biti niz enakovreden eni izmed znanih kategorij kategorij, opisanih v GAWK: Učinkovito programiranje AWK . Predložiti morate tudi besedilno domeno. Če želite uporabiti trenutno domeno, uporabite TEXTDOMAIN .

USMERJENE FUNKCIJE

Funkcije v AWK so opredeljene takole:

ime funkcije ( seznam parametrov ) { stavki }

Funkcije se izvajajo, ko se kličejo iz znotraj izrazov v posameznih vzorcih ali dejanjih. Dejanske parametre, ki so na voljo v funkcijskem klicu, se uporabljajo za instanciranje formalnih parametrov, prijavljenih v funkciji. Nizi se prenesejo s sklicevanjem, druge spremenljivke se prenesejo po vrednosti.

Ker funkcije prvotno niso bile del jezika AWK, so določbe o lokalnih spremenljivkah precej nerodne: v seznamu parametrov so označene kot dodatni parametri. Konvencija mora ločiti lokalne spremenljivke od dejanskih parametrov z dodatnimi presledki na seznamu parametrov. Na primer:

funkcija f (p, q, a, b) # a in b sta lokalna {...} / abc / {...; f (l, 2); ...}

Leva oklepaja v funkcijskem klicu je obvezna, da takoj sledijo imenu funkcije, brez vmesnega belega prostora. S tem se izognemo skladenjski dvoumnosti s operatorjem povezovanja. Ta omejitev ne velja za vgrajene funkcije, naštete zgoraj.

Funkcije se lahko kličejo med seboj in so lahko rekurzivne. Funkcijski parametri, ki se uporabljajo kot lokalne spremenljivke, se inicializirajo v ničelni niz in ničelno število pri pozivu funkcije.

Uporabite povratni izraz, da vrnete vrednost iz funkcije. Povratna vrednost je nedefinirana, če ni zagotovljena nobena vrednost, ali če se funkcija vrne s »padajočim« koncem.

Če je podan - lint , gawk opozarja na klice na nedefinirane funkcije v času parse, namesto v času izvajanja. Klicanje nedefinirane funkcije ob zagonu je fatalna napaka.

Namesto funkcije se lahko uporabi beseda func .

Dinamično nalaganje novih funkcij

Začenši z različico 3.1 gawk , lahko dinamično dodate nove vgrajene funkcije na tekočega gawk tolmača. Celotne podrobnosti presegajo področje uporabe tega priročnika; glejte GAWK: Učinkovito programiranje AWK za podrobnosti.

razširitev ( objekt , funkcija )

Dinamično povežite datoteko skupnega predmeta poimenovanega z objektom in pokličite funkcijo v tem objektu, da izvedete inicializacijo. To bi moralo biti zagotovljeno kot nizov. Vrne vrednost, ki jo vrne funkcija .

Ta funkcija je zagotovljena in dokumentirana v GAWK: Učinkovito programiranje AWK , vendar se bo vse o tej funkciji v naslednji izdaji verjetno spremenilo. STRUNJNO priporočamo, da te funkcije ne uporabljate za vse, za katere niste pripravljeni ponoviti.

SIGNALI

pgawk sprejema dva signala. SIGUSR1 povzroči, da se v datoteko profila izklopi profil in ogrodje klicev funkcij, ki je bodisi awkprof.out ali katera datoteka je imenovana z možnostjo --profile . Nato nadaljuje teči. SIGHUP povzroči, da odlaga profil in funkcijo stikov klicev in nato zapusti.

PRIMERI

Natisnite in razvrstite imena za prijavo vseh uporabnikov: BEGIN {FS = ":"} {natisnite $ 1 | "razvrstite"} Številke vrstic v datoteki: {nlines ++} END {print nlines} Vsako vrstico predhodno označite s številko v datoteki: {print FNR, $ 0} Concatenate in številka vrstice (različica na temo): {print NR, $ 0}

Internacionalizacija

Konstante nizov so zaporedja znakov, zaprtih v dvojnih narekovajih. V okoljih, ki niso angleško govoreči, je v programu AWK mogoče označiti nizov, ki zahtevajo prevod v naraven jezik. Takšni nizi so označeni v programu AWK z vodilnim podčrtom (`` _ ''). Na primer,

gawk 'BEGIN {natisni "zdravo, svet"} "

vedno natisne zdravo, svet . Toda,

gawk 'BEGIN {natisni _ "zdravo, svet"} "

lahko natisne bonjour, monde v Franciji.

Obstaja več korakov za izdelavo in vodenje lokaliziranega AWK programa.

1.

Dodajte ukrep BEGIN, da dodate vrednost spremenljivki TEXTDOMAIN , da besedilno domeno nastavite na ime, povezano z vašim programom.


BEGIN {TEXTDOMAIN = "mojprog"}

To omogoča gawk najti datoteko .mo, povezano z vašim programom. Brez tega koraka gawk uporablja besedilno domeno sporočil , ki verjetno ne vsebuje prevodov za vaš program.

2.

Označite vse nize, ki jih je treba prevesti z vodilnimi podčrtavami.

3.

Če je potrebno, uporabite funkcije dcgettext () in / ali bindtextdomain () v svojem programu, kot je primerno.

4.

Zaženite gawk -gen-po -f myprog.awk> myprog.po, da ustvarite datoteko .po za svoj program.

5.

Zagotovite ustrezne prevode in izdelajte in namestite ustrezno datoteko .mo .

Funkcije internacionalizacije so podrobno opisane v GAWK: Učinkovito programiranje AWK .

Združljivost Posix

Primarni cilj za gawk je združljivost s standardom POSIX, kot tudi z najnovejšo različico UNIX awk . V ta namen gawk vključuje naslednje vidne funkcije uporabnika, ki niso opisane v knjigi AWK, temveč so del različice awk v Bell Laboratories in so v standardu POSIX.

Knjiga kaže, da se dodelitev spremenljivke ukazne vrstice zgodi, ko awk drugače odpre argument kot datoteko, ki je po izvedbi bloka BEGIN . Vendar pa se je v prejšnjih izvedbah, ko se je taka naloga pojavila pred imeni datotek, dodelitev zgodila, preden se je zagnal blok BEGIN . Aplikacije so bile odvisne od te funkcije. «Ko je bila awk spremenjena, da se ujema z njeno dokumentacijo, je bila dodana možnost -v za dodeljevanje spremenljivk pred izvedbo programa, ki je bila prilagojena aplikacijam, ki so bile odvisne od starega vedenja. (To funkcijo so se dogovorili tako Bell Laboratories kot razvijalci GNU.)

Možnost -W za izvajanje specifičnih funkcij je iz standarda POSIX.

Pri obdelavi argumentov gawk uporablja posebno možnost `` - '', da signalizira konec argumentov. V načinu združljivosti opozarja, vendar drugače ignorira nedefinirane možnosti. Pri normalnem delovanju se taki argumenti prenesejo v program AWK, da ga obdelajo.

Knjiga AWK ne določa povratne vrednosti srand () . Standard POSIX vrne seme, ki ga je uporabil, da omogoči sledenje naključnim zaporedjem številk. Zato srand () v gawk tudi vrne svoje trenutno seme.

Druge nove funkcije so: uporaba več -f možnosti (od MKS awk ); polje ENVIRON ; \ a in \ v zaporedja pobega (opravljeno prvotno v gawk in nazaj v različico Bell Laboratories); tolower () in toupper () vgrajene funkcije (iz različice Bell Laboratories); in specifikacije za pretvorbo ANSI C v printf (opravljeno najprej v različici Bell Laboratories).

Zgodovinske značilnosti

Obstajajo dve funkciji zgodovinskih izvedb AWK, ki jih podpira gawk . Prvič, vgrajena funkcija dolžina () lahko pokličete ne le brez argumentov, temveč tudi brez oklepajev! Tako,

a = dolžina # Holy Algol 60, Batman!

je enako kot katerikoli izmed

a = dolžina ()
a = dolžina ($ 0)

Ta funkcija je označena kot »opuščena« v standardu POSIX in gawk izda opozorilo o njegovi uporabi, če je v ukazni vrstici podana -lint .

Druga funkcija je uporaba bodisi nadaljevanje bodisi ukaz za prekinitev zunaj telesa za čas , za ali zanke. Tradicionalne izvedbe AWK so takšno uporabo obravnavale kot enakovredne naslednji izjavi. Gawk podpira to uporabo, če je naveden -traditional .

GNU razširitve

Gawk ima številne razširitve za POSIX awk . Opisani so v tem razdelku. Vse razširitve, opisane tukaj, je mogoče onemogočiti tako, da se z geslom sklicujete z --traditional opcijo.

Naslednje funkcije gawk niso na voljo v POSIX awk .

*

Za datoteke, imenovane prek možnosti -f, se ne izvaja iskanje poti. Zato okoljska spremenljivka AWKPATH ni posebna.

*

Zaporedje uhajanja \ x . (Onemogočeno z --posix .)

*

Funkcija fflush () . (Onemogočeno z --posix .)

*

Sposobnost nadaljevanja vrstic po ? in :. (Onemogočeno z --posix .)

*

Okularne in heksadecimalne konstante v programih AWK.

*

Spremenljivke ARGIND , BINMODE , ERRNO , LINT , RT in TEXTDOMAIN niso posebne.

*

Spremenljivka IGNORECASE in njeni stranski učinki niso na voljo.

*

Spremenljivka FIELDWIDTHS in delitev polja s fiksno širino.

*

Matrika PROCINFO ni na voljo.

*

Uporaba RS kot regularnega izraza.

*

Posebna imena datotek, ki so na voljo za preusmeritev I / O, niso prepoznana.

*

| & Operater za ustvarjanje so-procesov.

*

Sposobnost razdelitve posameznih znakov z ničelnim nizom kot vrednostjo FS in kot tretji argument za split () .

*

Izbirni drugi argument za zapiranje () .

*

Izbirni tretji argument za funkcijo ujemanja () .

*

Sposobnost uporabe pozicijskih specifikacij s printf in sprintf () .

*

Uporaba brisalnega polja za brisanje celotne vsebine matrike.

*

Uporaba naslednje datoteke za opustitev obdelave trenutne vhodne datoteke.

*

(In) , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () ali () , rshift () , strftime () , strtonum () , systime () in xor () funkcije.

*

Lokalizirani nizi.

*

Dinamično dodajanje novih vgrajenih funkcij s funkcijo razširitve () .

Knjiga AWK ne določa povratne vrednosti funkcije close () . Gawk 's close () vrne vrednost iz fclose (3) ali pclose (3), ko zapira izhodno datoteko ali cev. Ob zaprtju vhodne cevi vrne status izhoda procesa. Povratna vrednost je -1, če imenovana datoteka, cev ali so-proces ni bila odprta s preusmeritvijo.

Ko se gawk sklicuje z --traditional opcijo, če je argument fs na opciji -F "t", potem je FS nastavljen na znak tabulatorja. Upoštevajte, da tipkanje gawk -F \ t ... preprosto povzroči, da lupina citira »t« in ne preide »` \ t '' v opcijo -F . Ker je to precej grd poseben primer, to ni privzeto vedenje. To vedenje se ne zgodi, če je naveden --posix . Če želite resnično dobiti znak zavihka kot ločilo polja, je najbolje uporabiti enojne narekovaje: gawk -F '\ t' ....

Glej druge ukaze : počakaj , lp , dokončaj , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , at , ki , iwconfig , ifconfig , vgdisplay , odprt , lsmod , ntohs , mailq , kill , wtmp