Saznajte Linux Command - gawk

Ime

gawk - jezik skeniranja uzoraka i obrade

Sinopsis

gawk [POSIX ili GNU style options] -f program-datoteka [ - ] datoteka ...
gawk [opcije POSIX ili GNU stil] [ - ] programska tekstualna datoteka ...

pgawk [opcije POSIX ili GNU stil] -f programske datoteke [ - ] datoteke ...
pgawk [opcije POSIX ili GNU stil] [ - ] programska tekstualna datoteka ...

Opis

Gawk je implementacija GNU projekta na programskom jeziku AWK-a. U skladu je sa definicijom jezika u POSIX 1003.2 komandnom jeziku i uslužnim standardima. Ova verzija zauzvrat je zasnovana na opisu u AWK programskom jeziku Aho, Kernighan i Weinberger, sa dodatnim karakteristikama koje se nalaze u verziji sistema VIX 4 UNIX awk . Gawk takođe nudi i najnovije Bell Laboratories awk ekstenzije, kao i nekoliko GNU-specifičnih ekstenzija.

Pgawk je profilna verzija gawk . On je identičan u svakom pogledu na gawk , izuzev da se programi pokreću sporije, a kada se to uradi, automatski se proizvodi profil izvršavanja u datoteci awkprof.out . Pogledajte opciju --profile , dole.

Komandna linija se sastoji od opcija samo za gawk , AWK programskog teksta (ako se ne isporučuje preko opcija -f ili --file ) i vrijednosti koje će biti dostupne u ARGC i ARGV unaprijed definiranim AWK varijablama.

Opcija Format

Gawk opcije mogu biti ili tradicionalne POSIX opcije za jedno slovo, ili dugačke opcije GNU-a. Opcije POSIX počinju sa jednim `` - '', dok dugačke opcije počinju sa `` - ''. Dugačke opcije su predviđene za pojedine karakteristike GNU-a i za POSIX-ovane funkcije.

Prateći POSIX standard, gawk -specifične opcije se isporučuju putem argumenata na opciju -W . Moguće je isporučiti više -W opcija. Svaka -W opcija ima odgovarajuću dugačku opciju, kako je detaljnije navedeno u nastavku. Argumenti dugim opcijama se pridružuju opciji sa znakom = bez ikakvih internih razmaka, ili se mogu dati u sljedećem argumentu komandne linije. Dugačke opcije mogu biti skraćene, sve dok se skraćenica ostaje jedinstvena.

Opcije

Gawk prihvata sledeće opcije, navedene u abecednom redu.

-F fs

--field-separator fs Koristite fs za separator polja za unos (vrijednost FS predefinisane varijable).

-v var = val

--assign var = val Dodijelite vrednost val promenljivoj var , prije nego počne izvršenje programa. Ovakve varijabilne vrijednosti su dostupne BEGIN bloku AWK programa.

-f programska datoteka

--file program-datoteka Pročitajte izvorni program AWK-a iz datoteke datoteke -datoteka , umjesto iz prvog argumenta komandne linije. Može se koristiti više -f (ili -file ) opcija.

-mf NNN

-mr NNN Podesi razne granice memorije na vrednost NNN . F zastava postavlja maksimalan broj polja, a oznaka r postavlja maksimalnu veličinu zapisa. Ove dve zastave i opcija -m su iz istraživačke verzije Bell Laboratories UNIX awk . Oni ih ignorišu, jer gawk nema predefinisane granice.

-W compat

- Tradicionalno

--compat

--tradicionalno Pokrenite u režimu kompatibilnosti . U režimu kompatibilnosti, gawk se ponaša identično sa UNIX awk ; nijedan od GNU-specifičnih proširenja nije prepoznat. Korišćenje --traditional-a je poželjnije u odnosu na druge oblike ove opcije. Pogledajte GNU EXTENSIONS , dole, za više informacija.

-W copyleft

-W autorsko pravo

--copyleft

--copyright Štampajte kratku verziju GNU poruke o autorskim pravima na standardnom izlazu i izađite uspešno.

-W dump-varijable [ = datoteka ]

--dump-variables [ = file ] Štampa sortiranu listu globalnih varijabli, njihovih tipova i krajnjih vrijednosti u datoteku . Ako nijedna datoteka nije data, gawk koristi datoteku pod imenom awkvars.out u trenutnom direktorijumu.

Imati listu svih globalnih varijabli je dobar način za traženje tipografskih grešaka u vašim programima. Takođe biste koristili ovu opciju ako imate veliki program sa puno funkcija i želite da budete sigurni da vaše funkcije ne nenamerno koriste globalne varijable koje ste mislili da budu lokalni. (Ovo je naročito laka greška koju treba napraviti sa jednostavnim promenljivim imenima kao što su i , j i tako dalje.)

- Pomozi mi

-W upotreba

- pomoć

--usage Štampajte relativno kratak pregled dostupnih opcija na standardnom izlazu. (Po standardima GNU kodiranja , ove opcije uzrokuju neposredan i uspešan izlaz.)

-V lint [ = pogubno ]

--lint [ = fatalno ] Obezbedite upozorenja o konstruktima koji su sumnjivi ili neprenosivi za druge implementacije AWK-a. Sa opcionim argumentom fatalne , upozorenja za lance postaju fatalne greške. Ovo može biti drastično, ali njegova upotreba će svakako podstaći razvoj čistijih AWK programa.

-Slava stara

--lint-old Obezbedite upozorenja o konstruktima koji nisu prenosivi na izvornu verziju Unixa awk .

-W gen-po

--gen-po Skenirajte i razvrstajte AWK program i generišite datoteku GNU .po formatu na standardnom izlazu sa stavkama za sve lokalizirane nizove u programu. Sam program se ne izvršava. Pogledajte distribuciju GNU distribucije za više informacija o .po datotekama.

-W ne-decimalni podaci

--non-decimalni podaci Prepoznajte oktalne i heksadecimalne vrijednosti u ulaznim podacima. Koristite ovu opciju uz puno opreza!

-W posix

--posix Ovo uključuje režim kompatibilnosti , sa sledećim dodatnim ograničenjima:

*

\ x escape sekvence nisu prepoznate.

*

Samo prostor i tab deluju kao separatori polja kada je FS postavljen na jedan prostor, nova linija ne.

*

Ne možete nastaviti sa linijama nakon ? i:.

*

Funkcija sinonim za funkciju ključne reči nije prepoznata.

*

Operatori ** i ** = ne mogu se koristiti umesto ^ i ^ = .

*

Funkcija fflush () nije dostupna.

-W profil [ = prof_file ]

--profile [ = prof_file ] Pošaljite profilisanje podataka prof_file . Podrazumevano je awkprof.out . Kada se pokreće sa gawk , profil je samo "lepa štampana" verzija programa. Kada se pokrene sa pgawk-om , profil sadrži broj izvršenja svake izjave u programu u levoj margini i brojevi poziva funkcija za svaku korisnički definiranu funkciju.

- Ponovni interval

--re-interval Omogućite korištenje izraza intervala u usklađivanju regularnog izraza (pogledajte Regular Expressions , dolje). Intervalni izrazi nisu tradicionalno dostupni na jeziku AWK-a. POSIX standard ih je dodao, kako bi awk i egrep bili konzistentni jedni s drugima. Međutim, njihova upotreba će najverovatnije prekinuti stara AWK programe, tako da ih gawk pruži samo ako su zatraženi sa ovom opcijom, ili kada je naveden --posix .

-W izvorni program-tekst

--source program-tekst Koristite programski tekst kao izvorni kod AWK programa. Ova opcija omogućava jednostavno premeštanje funkcija biblioteke (koristi se pomoću opcija -f i --file ) sa izvornim kodom unetim u komandnu liniju. Namenjen je prvenstveno za srednje i velike AWK programe koji se koriste u skriptama.

-W verzija

--version Informacije o verziji za ovu kopiju gawka na standardnom izlazu. Ovo je korisno uglavnom zato što znate da li je trenutna kopija gawk-a na vašem sistemu ažurna u odnosu na sve što distribuira Free Software Foundation. Ovo je takođe korisno prilikom prijavljivanja grešaka. (Po standardima GNU kodiranja , ove opcije uzrokuju neposredan i uspešan izlaz.)

- Signal kraj opcija. Ovo je korisno da dozvolite dalje argumente za sam AWK program da započne sa `` - ''. Ovo je uglavnom za doslednost sa konvencijom za analizu argumenta koju koristi većina drugih POSIX programa.

U režimu kompatibilnosti, sve druge opcije su označene kao nevažeće, ali se na drugi način ignorišu. U normalnom radu, sve dok se programski tekst isporučuje, nepoznate opcije se prenose na AWK program u ARGV nizu za obradu. Ovo je naročito korisno za pokretanje AWK programa pomoću mehanizma "#!" Izvršnog prevodioca.

IZVRŠENJE AWK PROGRAMA

AWK program se sastoji od niza izjava o uzorku i opcionalnim definicijama funkcija.

obrazac { akcije izjave }

ime funkcije ( lista parametara ) { izjave }

Gawk najpre čita programski izvor iz programskih fajlova ako je specificirano, od argumenata do --source ili iz prvog ne-opcije argumenta u komandnoj liniji. Opcije -f i --source se mogu koristiti više puta u komandnoj liniji. Gawk čita programski tekst kao da su svi izvorni tekstovi programskih fajlova i izvornih tekstova komandne linije bili povezani zajedno. Ovo je korisno za izgradnju biblioteka funkcija AWK, bez potrebe da ih uključite u svaki novi AWK program koji ih koristi. Takođe pruža mogućnost mešanja funkcija biblioteke sa programima komandne linije.

Varijabla okruženja AWKPATH određuje putanju pretraživanja koja se koristi prilikom pronalaženja izvornih datoteka imenom sa opcijom -f . Ako ova varijabla ne postoji, podrazumevana staza je ".: / Usr / local / share / awk" . (Stvarni direktorijum može da varira, u zavisnosti od toga kako je gawk napravljen i instaliran.) Ako ime datoteke datu opciji -f sadrži znak / znak, ne vrši se pretraga putanje.

Gawk izvršava AWK programe u sljedećem redosledu. Prvo su izvršene sve varijabilne zadatke specificirane preko opcije -v . Zatim, gawk kompajlira program u internu formu. Zatim, gawk izvršava kod u BEGIN blokovima (ako ih ima), a zatim nastavlja čitanje svake datoteke nazvane u ARGV nizu. Ako u komandnoj liniji nema fajlova nazvanih, gawk čita standardni unos.

Ako ime datoteke u komandnoj liniji ima oblik var = val , tretira se kao varijabla. Varijable var će biti dodijeljeno vrednost val . (Ovo se dešava nakon pokretanja bilo kojeg BEGIN bloka.) Dodjela varijabli komandne linije je najkorisnija za dinamičku dodjelu vrijednosti varijablama koje AWK koristi za kontrolu načina na koji je unos podijeljen u polja i zapise. Takođe je korisno za kontrolu stanja ako su potrebne više prelaza preko jedne datoteke podataka.

Ako je vrednost određenog elementa ARGV prazna ( "" ), gavk preskoči preko njega.

Za svaki zapis u ulazu, gawk testira kako bi se utvrdilo da li se poklapa sa bilo kojim obrazcem u AWK programu. Za svaki obrazac koji se zapisi podudara, pridružena akcija se izvršava. Obrasci se testiraju u redosledu koji se pojavljuje u programu.

Konačno, nakon što je svi unos iscrpljen, gawk izvršava kod u END blokovima (ako ih ima).

Varijable, zapisi i polja

AWK promenljive su dinamične; oni nastaju kada se prvi put koriste. Njihove vrijednosti su brojevi ili nizovi plutajućih tačaka, ili oboje, u zavisnosti od toga kako se koriste. AWK takođe ima jednodimenzionalne nizove; Nizovi sa višestrukim dimenzijama mogu se simulirati. Nekoliko unapred definisanih promenljivih postavljeno je kao programski rad; ovi će biti opisani kao potrebni i sažeti u nastavku.

Zapisi

Obično se zapisi razdvajaju novim znakovima. Možete kontrolisati kako se zapisi razdvajaju dodeljivanjem vrijednosti ugrađenoj varijabli RS . Ako je RS svaki pojedinačni karakter, taj lik razdvaja zapise. Inače, RS je regularni izraz. Tekst na ulazu koji odgovara ovom regularnom izrazu razdvaja zapis. Međutim, u režimu kompatibilnosti, koristi se samo prvi karakter njegove string vrednosti za razdvajanje zapisa. Ako je RS postavljen na null string, onda su zapisi razdvojeni praznim linijama. Kada je RS postavljen na null string, znak nove linije uvek deluje kao separator polja, pored svake vrednosti koju FS može imati.

Polja

Kako se svaki ulazni zapis čita, gawk razdvaja zapis u polja , koristeći vrijednost FS varijable kao separator polja. Ako je FS jedan znak, polja su odvojena tom znakom. Ako je FS nula nula, onda svaki pojedinačni znak postaje odvojeno polje. U suprotnom, FS se očekuje da bude puno regularno izražavanje. U posebnom slučaju kada je FS jedinstveni prostor, polja su odvojena pomoću prozora i / ili tabova i / ili novih linija. (Ali pogledajte raspravu o --posix , dole). NAPOMENA: Vrednost IGNORECASE (pogledaj ispod) takođe utiče na to kako su polja podijeljena kada je FS regularni izraz i kako se podaci odvajaju kada je RS regularni izraz.

Ako je varijabla FIELDWIDTHS postavljena na listu sa brojevima odvojenim razmakom, očekuje se da će svako polje imati fiksnu širinu, a gavk će podeliti zapis pomoću određenih širina. Vrednost FS se zanemaruje. Dodjeljivanje nove vrijednosti FS-u prepisuje korištenje FIELDWIDTHS-a i vraća podrazumevano ponašanje.

Svakom polju u ulaznom zapisu može se pozvati njegova pozicija, $ 1 , $ 2 i tako dalje. $ 0 je ceo zapis. Polja ne moraju biti referencirane konstantama:

n = 5
odštampajte $ n

odštampa peto polje u ulaznom zapisu.

Promenljiva NF je podešena na ukupan broj polja u ulaznom zapisu.

Pozivanje nepostojećih polja (npr. Polja nakon $ NF ) proizvodi nultu-niz. Međutim, dodeljivanje nepostojeće polje (npr. $ (NF + 2) = 5 ) povećava vrijednost NF-a , kreira sva intervencijska polja sa null stringom kao njihovu vrijednost, i uzrokuje vrijednost $ 0 za ponovno izračunavanje, uz polja su odvojena vrijednošću OFS-a . Pozivanje na negativna numerisana polja uzrokuje fatalnu grešku. Dreniranje NF dovodi do gubitka vrijednosti polja koje premašuju novu vrijednost, a vrijednost od 0 za ponovno izračunavanje, s tim da su polja razdvojena vrijednošću OFS-a .

Dodjeljivanje vrijednosti postojećem polju dovodi do rekonstrukcije čitavog rekorda kada se referencira vrijednost od $ 0 . Slično tome, dodjeljivanje vrijednosti do $ 0 dovodi do resplitacije zapisa, stvarajući nove vrijednosti za polja.

Ugrađene varijable

Gavkove ugrađene varijable su:

ARGC

Broj argumenata komandne linije (ne uključuje opcije za gawk ili izvor programa).

ARGIND

Indeks u ARGV trenutne datoteke koja se obrađuje.

ARGV

Niz argumenata komandne linije. Niz je indeksiran od 0 do ARGC - 1. Dinamički mijenja sadržaj ARGV-a može kontrolirati datoteke koje se koriste za podatke.

BINMODE

Na ne-POSIX sistemima, specificira se upotreba `` binarnog '' režima za sve datoteke I / O. Numeričke vrednosti od 1, 2 ili 3 navode da bi ulazne datoteke, izlazne datoteke ili sve datoteke trebale koristiti binarni I / O. Vrednosti stringa "r" ili "w" navode da ulazne datoteke ili izlazne datoteke treba da koriste binarni I / O. Vrednosti stringa "rw" ili "wr" navode da bi sve datoteke trebale koristiti binarni I / O. Svaka druga vrijednost stringa se tretira kao "rw" , ali generira poruku upozorenja.

CONVFMT

Format konverzije za brojeve, "% .6g" , po podrazumevanom podešavanju.

ENVIRON

Niz koji sadrži vrijednosti trenutnog okruženja. Niz je indeksiran promenljivim okruženjem, svaki element je vrijednost te varijable (npr. ENVIRON ["HOME"] može biti / home / arnold ). Promena ovog polja ne utiče na okruženje koje se vidi od programa koji se gawk kreće preko redirekcije ili sistema () .

ERRNO

Ako dođe do sistemske greške ili radite preusmeravanje za getline , tokom čitanja za getline ili tokom zatvaranja () , ERRNO će sadržati niz koji opisuje grešku. Vrednost je predmet prevoda u ne-engleskim lokacijama.

FIELDWIDTHS

Lista odvojenih polja u bijelom prostoru. Kada je podešen, gawk analizira ulaz u polja fiksne širine, umesto da koristi vrijednost FS varijable kao separator polja.

IME DOKUMENTA

Ime trenutne ulazne datoteke. Ako u komandnoj liniji nisu navedene datoteke, vrednost FILENAME je `` - ''. Međutim, FILENAME je nedefinisan unutar BEGIN bloka (osim ako je podešen po getline ).

FNR

Broj ulaznog zapisa u trenutnoj ulaznoj datoteki.

FS

Polje za unos polja, podrazumevani prostor. Pogledajte polja , iznad.

IGNORECASE

Kontroliše osetljivost slučaja svih regularnih izraza i nizova operacija. Ako IGNORECASE ima nultu vrijednost, onda upoređivanje nizova i usklađivanje uzoraka u pravilima, razdvajanje polja s FS-om , zapisivanje razdvajanja sa RS , regularni izraz koji odgovara ~ i ! ~ , I gensub () , gsub () , index () , match () , split () i sub () ugrađene funkcije sve ignorišu slučaj kada rade regularne izraze. NAPOMENA: Podpisivanje matrice ne utiče, niti je asort () funkcija.

Dakle, ako IGNORECASE nije jednak nuli, / aB / odgovara svim nizovima "ab" , "aB" , "Ab" i "AB" . Kao i kod svih AWK varijabli, početna vrijednost IGNORECASE je nula, tako da su svi regularni izrazi i nizovi operacije obično osjetljivi na veličinu slova. U okviru Unix-a, puni ISO 8859-1 Latin-1 znak se koristi kada ignorišete slučaj.

LINT

Pruža dinamičku kontrolu opcije --lint iz programa AWK. Kada je istina, gawk odštampa upozorenja na lancu. Kada je netačno, to ne znači. Kada se vrijednost stringa dodeli "fatalnom" , upozorenja o lancu postaju fatalne greške, baš kao i - lint = fatalna . Svaka druga vrijedna vrijednost samo štampa upozorenja.

NF

Broj polja u trenutnom ulaznom zapisu.

NR

Ukupan broj dosadašnjih ulaznih podataka.

OFMT

Izlazni format za brojeve, "% .6g" , podrazumevano.

OFS

Separator izlaza iz polja, podrazumevani prostor.

ORS

Izlazni zapis separatora, po podrazumevanoj liniji.

PROCINFO

Elementi ovog polja pružaju pristup informacijama o pokretnom AWK programu. Na nekim sistemima mogu biti elementi u nizu, "grupa1" kroz "grupu n " za n , što je broj dodatnih grupa koje ovaj proces ima. Koristite u operateru da testirate za ove elemente. Na raspolaganju su sljedeći elementi:

PROCINFO ["egid"]

vrednost sistemskog poziva sistema getegid (2).

PROCINFO ["euid"]

vrednost sistemskog poziva geteuid (2).

PROCINFO ["FS"]

"FS" ako je djeljenje polja sa FS na snazi ​​ili "FIELDWIDTHS" ako je djeljenje polja sa FIELDWIDTHS na snazi.

PROCINFO ["gid"]

vrednost sistemskog poziva sistema getgid (2).

PROCINFO ["pgrpid"]

ID grupe procesa trenutnog procesa.

PROCINFO ["pid"]

ID procesa trenutnog procesa.

PROCINFO ["ppid"]

ID roditeljskog procesa tekućeg procesa.

PROCINFO ["uid"]

vrijednost sistema getuid (2).

RS

Separator ulaznih zapisa, podrazumevano nova linija.

RT

Terminator zapisa. Gawk postavlja RT na ulazni tekst koji odgovara karakteru ili redovnom izrazu koji je odredio RS .

RSTART

Indeks prvog karaktera uparen sa podudaranjem () ; 0 ako nema meča. (To znači da indikatori karaktera počinju od jednog.)

RLENGTH

Dužina stringa koja odgovara matrici () ; -1 ako nema meča.

SUBSEP

Karakter se koristi za razdvajanje višestrukih indeksa u elementima polja, podrazumevano "\ 034" .

TEXTDOMAIN

Tekstualni domen AWK programa; koristi se za pronalaženje lokalizovanih prevoda za nizove programa.

Nizovi

Nizovi su indeksirani izrazima između kvadratnih zagrada ( [ i ] ). Ako je izraz izraz spisak izraza ( expr , expr ...) onda je indeksni niz manijak niz koji se sastoji od koncenatacije (string) vrijednosti svakog izraza, odvojenog vrijednošću SUBSEP varijable. Ovaj objekat se koristi za simuliranje višestruko dimenzioniranih nizova. Na primjer:

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

dodeljuje niz "zdravo, svet \ n" elementu niza x koji je indeksiran nizom "A \ 034B \ 034C" . Svi nizovi u AWK-u su asociativni, tj. Indeksirani po vrijednostima stringa.

Specijalni operator u može se koristiti u if ili while izjavi da bi se videlo da li niz ima indeks koji se sastoji od određene vrednosti.

ako (val u nizu) štampani niz [val]

Ako niz ima više indeksa, koristite (i, j) u nizu .

U konstruktu se takođe može koristiti u petlji za ponavljanje svih elemenata niza.

Element se može izbrisati iz polja pomoću izraza za brisanje . Izjava o brisanju se takođe može koristiti za brisanje čitavog sadržaja niza, jednostavno navođenjem imena niza bez indeksa.

Varijabilno pisanje i konverzija

Varijable i polja mogu biti brojevi (plutajuće tačke), stringovi ili oboje. Kako se vrijednost varijable tumači zavisi od njegovog konteksta. Ako se koristi u numeričkom izrazu, biće tretirana kao broj, ako se koristi kao niz koji će se tretirati kao niz.

Da biste primenili varijablu koja će biti tretirana kao broj, dodajte ga 0; da bi ga naterao da se tretira kao niz, prikriju je nultom nizom.

Kada se string mora pretvoriti u broj, konverzija se ostvaruje koristeći strtod (3). Broj se pretvara u niz koristeći vrednost CONVFMT kao format za sprintf (3), sa numeričkom vrijednošću varijable kao argumentom. Međutim, iako su svi brojevi u AWK-u plutajuće tačke, integralne vrijednosti se uvijek konvertuju kao cijeli brojevi. Dakle, dato

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

promenljiva b ima vrijednost stringa "12" a ne "12.00" .

Gawk vrši poređenja na sledeći način: Ako su dve varijable numeričke, one se upoređuju numerički. Ako je jedna vrijednost numerička, a druga ima vrijednost stringa koja je "numerički niz", onda se poredjenja vrše numerički. U suprotnom, numerička vrednost se pretvara u niz i vrši se upoređivanje stringova. Dve strune se poredi, naravno, kao žice. Imajte na umu da POSIX standard primjenjuje koncept `` numerički niz '' svuda, čak i za konstante stringova. Međutim, ovo je očito netačno, a gawk to ne čini. (Srećom, ovo je ispravno u sledećoj verziji standarda.)

Imajte na umu da string konstante, kao što je "57" , nisu numerički nizovi, oni su string konstante. Ideja o `` numeričkom nizu '' odnosi se samo na polja, ulazne linije , FILENAME , ARGV elemente, ENVIRON elemente i elemente niza kreiranog od splita () koji su numerički stringovi. Osnovna ideja je da se na taj način tretira korisničko unos i samo korisnički unos koji izgleda numerički.

Uninitializovane varijable imaju numeričku vrijednost 0 i vrijednost stringa (nula, ili prazna, string).

Octal i Hexadecimal Constants

Počevši od verzije 3.1 gawk-a, možete koristiti izvorne šifre programa AWK u C-stilu kataloške i heksadecimalne konstante. Na primer, oktalna vrednost 011 je jednaka decimalnom 9 , a heksadecimalna vrednost 0x11 je jednaka decimalnom 17.

String Constants

Konstante stringa u AWK su sekvence znakova zatvorenih između dvostrukih citata ( " ). U okviru nizova su prepoznate određene escape sekvence , kao u C. To su:

\\

Dobra backslash.

\ a

Znak "upozorenja"; obično ASCII BEL znak.

\ b

backspace.

\ f

form-feed.

\ n

newline.

\ r

povrat kočije.

\ t

horizontalni tab.

\ v

vertikalni tabulator.

\ x heks cifre

Karakter predstavljen nizom heksadecimalnih cifara koji sledi \ x . Kao iu ANSIC-u, sve sljedeće heksadecimalne cifre se smatraju delom escape baze. (Ova karakteristika bi trebalo da nam kaže nešto o dizajnu jezika od strane odbora.) Na primjer, "\ x1B" je ASCIIESC (escape) karakter.

\ ddd

Karakter predstavljaju 1-, 2- ili 3-cifreni sekvencu oktalnih cifara. Na primjer, "\ 033" je ASCII ESC (escape) znak.

\ c

Bukvalni karakter c .

Escape sekvence se takođe mogu koristiti unutar konstantnih regularnih izraza (npr. / [\ T \ f \ n \ r \ v] / odgovara znakovima belih prostora).

U režimu kompatibilnosti, karakteri predstavljeni oktalnim i heksadecimalnim escape sekvencama se tretiraju bukvalno kada se koriste u konstantama regularnog izraza. Dakle, / a \ 52b / je ekvivalentan / a \ * b / .

Patterns and Actions

AWK je line-orijentisan jezik. Prvi je model, a onda akcija. Izjave o akciji su priložene u { i } . Ili obrazac možda nedostaje, ili akcija možda nedostaje, ali, naravno, ne oboje. Ako obrazac nedostaje, akcija se izvršava za svaki pojedinačni unos podataka. Nedostatak akcije je ekvivalentan

{print}

koji štampa ceo zapis.

Komentari počinju znakom `` # '' i nastavljaju se do kraja linije. Prazne linije se mogu koristiti za razdvajanje izjava. Obično se izjava završava sa novom linijom, međutim, to nije slučaj za linije koje se završavaju u ``, '', { , ? , : ,, && , ili || . Linije na kojima se završavaju ili se takođe i svoje izjave automatski nastavljaju na sledećoj liniji. U drugim slučajevima, linija se može nastaviti tako što će se završiti sa ', u kom slučaju će nova linija biti ignorirana.

Višestruke izjave se mogu staviti na jednu liniju tako što ih razdvojite sa ``; ''. Ovo se odnosi i na izjave unutar akcionog dela parice uzorka-akcija (uobičajeni slučaj), kao i na izjave o akcijama uzorka.

Patterns

AWK šabloni mogu biti jedan od sljedećih:

BEGIN END / regularni izraz / šablon relacionog izraza & šablon obrazca || obrazac uzorka ? šablon : šablon ( šablon ) ! pattern1 , pattern2

BEGIN i END su dve posebne vrste obrazaca koji nisu testirani na ulazu. Akcioni delovi svih BEGIN obrasca se spajaju kao da su sve izjave napisane u jednom BEGIN bloku. Oni se izvršavaju pre nego što se čitanje unese. Slično tome, svi END blokovi se spajaju i izvršavaju kada se iscrpi svi unosi (ili kada se izvrši izjava o izlazu ). BEGIN i END obrasci se ne mogu kombinovati sa drugim obrascima u izrazima u obliku. BEGIN i END šabloni ne mogu imati nedostajućih djelova djelovanja.

Za / regularni izraz / obrasci, pridružena izjava se izvršava za svaki ulazni zapis koji odgovara redovnom izrazu. Redovni izrazi su isti kao oni u egrep (1), a rezimirani su u nastavku.

Relacijski izraz može koristiti bilo koji od operatora definisanih dole u odjeljku o akcijama. Oni uglavnom testiraju da li određena polja odgovaraju određenim regularnim izrazima.

The && , || , i ! operateri su logični I, logički OR i logički NOT, respektivno, kao u C. Oni vrše evaluaciju kratkog spoja, takođe kao i kod C, i koriste se za kombinovanje više primitivnih izraza u obliku. Kao iu većini jezika, zagrade se mogu koristiti za promjenu redosleda evaluacije.

Operator?: Kao isti operater u C. Ako je prvi obrazac tačan onda je model koji se koristi za testiranje drugi šablon, inače je treći. Procenjuje se samo jedan od drugog i trećeg obrasca.

Obrazac1 , obrazac2 oblika izraza naziva se šablon raspona . Ona se podudara sa svim ulaznim podacima počevši od zapisa koji odgovara pattern1 , i nastavlja se sve do zapisa koji odgovara obrazcu2 , uključujući. Ne kombinira se sa nekom drugom vrstom izraza.

Redovni izrazi

Redovni izrazi su proširena vrsta koja se nalazi u egrep . One se sastoje od karaktera na sledeći način:

c

odgovara ne-metakarakter c .

\ c

odgovara bukvalnom karakteru c .

.

odgovara svim karakterima uključujući i novu liniju.

^

odgovara početku stringa.

$

odgovara kraju stringa.

[ abc ... ]

lista znakova, odgovara bilo kojem od znakova abc ....

[^ abc ... ]

negirana lista karaktera, odgovara svakom karakteru osim abc ....

r1 | r2

alternacija: odgovara r1 ili r2 .

r1r2

koncenatacija: odgovara r1 , a zatim r2 .

r +

odgovara jednoj ili više r .

r *

odgovara nuli ili više r .

r ?

odgovara nuli ili jednom r .

( r )

grupiranje: odgovara r .

r { n }

r { n ,}

r { n , m } Jedan ili dva broja unutar niza označavaju intervalni izraz . Ako postoji jedan broj u grudima, prethodni regularni izraz r se ponavlja n puta. Ako su dva broja odvojena zarezom, r se ponavlja n do m puta. Ako postoji jedan broj, a zatim zapeta, r se ponavlja najmanje n puta.

Intervalni izrazi su dostupni samo ako je u komandnoj liniji specificirano --posix ili --re-interval .

\ y

odgovara praznom nizu na početku ili na kraju reči.

\ B

odgovara praznom nizu unutar reči.

\ <

odgovara praznom nizu na početku reči.

\>

odgovara praznom nizu na kraju reči.

\ w

se podudaraju sa bilo kojim riječnim sastavnim znakom (slovom, cifrom ili podčaljkom).

\ W

odgovara bilo kom karakteru koji nije sastavni deo reči.

\ `

odgovara praznom nizu na početku bafera (string).

\ '

odgovara praznom nizu na kraju bafera.

Bežične sekvence koje važe u konstantama stringa (pogledajte dole) takođe važe u regularnim izrazima.

Klase karaktera predstavljaju novu funkciju uvedenu u POSIX standard. Klasa znakova je posebna oznaka za opisivanje listi znakova koji imaju određeni atribut, ali gde se stvarni likovi mogu razlikovati od zemlje do zemlje i / ili od karaktera postavljenog na skup znakova. Na primjer, pojam o tome šta je alfabetski karakter razlikuje se u SAD-u i Francuskoj.

Klasa karaktera važi samo u regularnom izrazu u zagradama liste znakova. Klase karaktera se sastoje od [: , ključne riječi koje označavaju klasu i :] . Klase znakova definisane POSIX standardom su:

[: alnum:]

Alfanumerički znakovi.

[: alpha:]

Abecedni znakovi.

[: prazno:]

Prostor ili tablice.

[: cntrl:]

Kontrolni znakovi.

[:cifra:]

Numerički znakovi.

[: graf:]

Znakovi koji se mogu štampati i vidljivi. (Prostor se može štampati, ali nije vidljiv, a a je oba.)

[:niže:]

Abecedni znaci nižih slova.

[: print:]

Štampani znaci (znakovi koji nisu kontrolni znakovi.)

[: punkt:]

Znaci interpunkcije (znakovi koji nisu slovo, cifre, kontrolni znakovi ili znakovi svemira).

[:prostor:]

Prostorni znaci (kao što su prostor, tabulator i forma, kako bi se nazvali nekoliko).

[: gornja:]

Abecedni znakovi velikih slova.

[: xdigit:]

Znakovi su heksadecimalni cifri.

Na primjer, prije POSIX standarda, za usklađivanje alfanumeričkih znakova, morali biste da napišete / [A-Za-z0-9] / . Ako je u vašem skupu karaktera bilo drugih alfabetskih znakova, to se ne bi podudaralo sa njima, a ako se vaš skup karaktera složi drugačije od ASCII-a, to možda čak i ne odgovara alfanumeričkim karakterima ASCII. Uz POSIX klase znakova, možete napisati / [[: alnum:]] / , a ovo se podudara s abecednim i numeričkim znakovima u vašem skupu znakova.

Na listama znakova mogu se pojaviti još dvije posebne sekvence. Ovi se odnose na skupove znakova koji nisu ASCII, koji mogu imati pojedinačne simbole (nazvane elementi sjedinjavanja ) koji su predstavljeni sa više od jednog karaktera, kao i nekoliko znakova koji su ekvivalentni za sakupljanje ili sortiranje. (Na primer, na francuskom, običan "e" i grob naglasak e "su ekvivalentni.)

Uparivanje simbola

Simbol za upoređivanje je višestruki element za sakupljanje koji je zatvoren u [. i .] . Na primjer, ako je ch element za sređivanje, onda je [[.ch.]] Regularni izraz koji odgovara ovom elementu sravnjivanja, dok je [ch] regularni izraz koji odgovara c ili h .

Klase ekvivalencije

Klasa ekvivalencije je specifično ime za spisak znakova koji su ekvivalentni. Ime je zatvoreno u [= i =] . Na primer, ime e bi moglo da se koristi da bi predstavljalo sve "e", "e", "" i "e". "U ovom slučaju, [[= e =]] je regularni izraz koji odgovara bilo kojoj od e , e ' ili e` .

Ove karakteristike su veoma korisne u ne-engleskom govornom prostoru. Funkcije biblioteke koje gawk koristi za usklađivanje regularnog izraza trenutno prepoznaju samo klase POSIX klasa; oni ne prepoznaju simbole sakupljanja ili klase ekvivalencije.

Operatori \ y , \ B , \ < , \> , \ w , \ W , \ ' i \' su specifični za gawk ; oni su ekstenzije zasnovane na objektima u GNU regularnim ekspresionim bibliotekama.

Različite opcije komandne linije kontrolišu kako gawk interpretira karaktere u regularnim izrazima.

Nema opcija

U defaultnom slučaju, gawk pruža sve mogućnosti POSIX regularnih izraza i operatora regularnog izrazaGNU opisanih gore. Međutim, izrazi intervala nisu podržani.

--posix

Podržani su samo POSIX regularni izrazi, GNU operateri nisu posebni. (Na primjer, \ w odgovara literalnom w ). Intervalni izrazi su dozvoljeni.

--tradicionalno

Tradicionalni Unix awk regularni izrazi su upareni. GNU operateri nisu posebni, intervalni izrazi nisu dostupni, niti su POSIX-ove klase znakova ( [[: alnum:]] i tako dalje). Znakovi opisani oktalnim i heksadecimalnim escape sekvencama tretiraju se bukvalno, čak i ako predstavljaju meta-karaktere regularnog izraza.

--re-interval

Dozvoli intervalne izraze u regularnim izrazima, čak i ako je obezbeđeno - tradicionalno .

Akcije

Akcijske izjave su u zagradama, { i } . Izjave o akciji se sastoje od uobičajenih zadataka dodeljivanja, uslovne i petlje koje se nalaze na većini jezika. Operatori, kontrolni izvodi i izvodi za ulaz / izlaz su uzorci nakon onih u C.

Operatori

Operatori u AWK-u su, prema redosledu smanjenja prvenstva,

( ... )

Grupisanje

$

Referenca polja.

++ -

Povećanje i smanjenje, i prefiks i postfiks.

^

Eksponencijacija ( ** se takođe može koristiti, a ** = za operatora zadatka).

+ -!

Unary plus, unary minus i logical negation.

* /%

Množenje, podela i modul.

+ -

Dodavanje i oduzimanje.

prostor

String concatenation.

<>

<=> =

! = == Redovni relacijski operatori.

~! ~

Usklađenost regularnog izraza, negirani meč. NAPOMENA: Ne koristite konstantan regularni izraz ( / foo / ) na levoj strani ~ ili ! ~ . Koristite samo jednu sa desne strane. Izraz / foo / ~ exp ima isto značenje kao i (($ 0 ~ / foo /) ~ exp ) . Ovo obično nije ono što je bilo nameravano.

u

Članstvo u Arrayu.

&&

Logički AND.

||

Logički OR.

?:

C uslovni izraz. Ovo ima oblik expr1 ? expr2 : expr3 . Ako je expr1 tačan, vrijednost izraza je expr2 , inače je expr3 . Procenjuje se samo jedan od expr2 i expr3 .

= + = - =

* = / =% = ^ = Dodjela. Podržani su i apsolutni zadatak ( var = vrijednost ) i dodjeljivanje operatora (drugi oblici).

Kontrolne izjave

Kontrolni iskazi su sledeći:

if ( condition ) statement [ else statement ] while ( condition ) statement do statement while ( condition ) for ( expr1 ; expr2 ; expr3 ) statement for ( var in array ) statement break continue delete array [ index ] delete array exit [ expression ] { izjave }

Izjave I / O

Izvodi ulaz / izlaz su sledeći:

zatvori ( datoteka [ , kako ] )

Zatvori fajl, cev ili ko-proces. Opciono kako se može koristiti samo pri zatvaranju jednog kraja dvosmerne cevi u zajednički proces. To mora biti string vrijednost, ili "do" ili "od" .

getline

Postavite $ 0 od sledećeg ulaznog zapisa; podesite NF , NR , FNR .

getline < datoteka

Postavite $ 0 iz sledećeg zapisa datoteke ; set NF .

getline var

Postavite var od sledećeg ulaznog zapisa; postaviti NR , FNR .

getline var < datoteka

Postavite var od sledećeg zapisa datoteke .

naredba | getline [ var ]

Pokrenite komandu koja izvodi izlaz ili u $ 0 ili var , kao gore.

naredba | & getline [ var ]

Pokrenite komandu kao zajednički proces koji izvodi izlaz ili u $ 0 ili var , kao gore. Ko-procesi su gawk produžetak.

sledeći

Zaustavite obradu trenutnog ulaznog zapisa. Sledeći ulazni zapis se čita i obrada počinje sa prvim obrascem u AWK programu. Ako se postigne kraj ulaznih podataka, blokovi END , ako postoje, se izvršavaju.

nextfile

Zaustavite obradu trenutne ulazne datoteke. Sledeći pročitani unos podataka dolazi iz sledeće ulazne datoteke. FILENAME i ARGIND se ažuriraju, FNR se resetuje na 1, a obrada počinje prvim obrascem u AWK programu. Ako se postigne kraj ulaznih podataka, blokovi END , ako postoje, se izvršavaju.

print

Štampa trenutni zapis. Izlazni zapis završava se sa vrijednošću ORS varijable.

print expr-list

Štampa izraze. Svaki izraz je odvojen vrijednošću OFS varijable. Izlazni zapis završava se sa vrijednošću ORS varijable.

print expr-list > datoteku

Štampa izraze u fajlu . Svaki izraz je odvojen vrijednošću OFS varijable. Izlazni zapis završava se sa vrijednošću ORS varijable.

printf fmt, expr-list

Formatirajte i odštampajte.

printf fmt, expr-list > datoteka

Formatirajte i odštampajte datoteku .

sistem ( cmd-linija )

Izvršite komandu cmd-liniju i vratite status izlaska. (Ovo možda neće biti dostupno na ne-POSIX sistemima.)

fflush ( [ datoteka ] )

Isperite bilo koji baferi povezani sa otvorenom datotekom izvoda ili datotekom cevi. Ako datoteka nedostaje, standardni izlaz se isprazni. Ako je datoteka nula nula, tada sve otvorene izlazne datoteke i cevi imaju ispupčene odbojnike.

Dodatna preusmerenja izlaza su dozvoljena za print i printf .

print ... >> file

dodaju izlaz u datoteku .

print ... | komandu

piše na cevi.

print ... | & komanda

šalje podatke u zajednički proces.

Komanda getline vraća 0 na kraj datoteke i -1 na grešku. Nakon greške, ERRNO sadrži niz koji opisuje problem.

NAPOMENA: Ako koristite cijev ili ko-proces da biste dobili liniju ili štampanje ili printf unutar petlje, morate koristiti close () da biste kreirali nove instance komande. AWK automatski ne zatvara cevi ili ko-procesira kada vrati EOF.

Izjava printf

Verzije AWK izjave printf i sprintf () (pogledajte dole) prihvataju sledeće formate specifikacije konverzije:

% c

ASCII znak. Ako je argument korišćen za % c numerički, tretira se kao znak i odštampan. U suprotnom, pretpostavlja se da je argument niz, a štampa se samo prvi karakter tog stringa.

% d , % i

Decimalni broj (celobrojni deo).

% e,% E

Broj plivajuće tačke obrasca [-] d.dddddde [+ -] dd . Format % E koristi E umesto e .

% f

Broj sa plutajućim tačkom obrasca [-] ddd.dddddd .

% g,% G

Koristite % e ili % f konverziju, u zavisnosti od toga koja je kraća, sa niskim bitnim nulama. Format % G koristi % E umesto % e .

% o

Neotpisani oktalni broj (takođe ceo broj).

% u Nepotpisani decimalni broj (opet, cijeli broj).

% s

Karakter string.

% x,% X

Neotpisani heksadecimalni broj (cijeli broj). Format % X koristi ABCDEF umesto abcdef .

%%

Jedan % znak; nijedan argument nije konvertovan.

Opcioni dodatni parametri mogu biti između % i kontrolnog slova:

broj $

Koristite broj argumenta u ovom trenutku u formatiranju. Ovo se naziva odredišni položaj i namenjen je prvenstveno za upotrebu u prevedenim verzijama stringova formata, a ne u originalnom tekstu AWK programa. To je produžetak gola .

-

Izraz mora biti opravdan u okviru svoje oblasti.

prostor

Za numeričke konverzije, prefiksite pozitivne vrijednosti sa prostorom i negativne vrijednosti sa znakom minus.

+

Oznaka plus, koja se koristi pre modifikatora širine (pogledaj ispod), kaže da uvek pruži znak za numeričke konverzije, čak i ako su podaci koji treba da budu formatirani pozitivni. + Premješta modifikator prostora.

#

Koristite "alternativni oblik" za određena kontrolna slova. Za % o , obezbedite vodeću nulu. Za % x i % X isporučite vodeći 0x ili 0X za nulti rezultat. Za % e , % E i % f , rezultat uvek sadrži decimalnu tačku. Za % g , i % G , zadnje nule se ne uklanjaju iz rezultata.

0

Vodeći 0 (nula) deluje kao zastavica, što ukazuje na to da se izlaz treba postaviti nulama umesto razmaka. Ovo se odnosi i na ne-numeričke izlazne formate. Ova zastava ima efekat samo kada je širina polja šira od vrednosti koja se štampa.

širina

Polje treba podići na ovu širinu. Polje je obično podložno razmacima. Ako je upotrebljena zastavica 0 , ona je obeležena nulama.

. prec

Broj koji precizira preciznost za štampanje. Za % e , % E i % f formate, ovo određuje broj cifara koje želite da odštampate desno od decimalne tačke. Za % g , i % G formate, on određuje maksimalan broj značajnih cifara. Za format % d , % o , % i , % u , % x , i % X , određuje minimalni broj cifara za štampanje. Za % s , on određuje maksimalan broj znakova iz stringa koji treba da se odštampa.

Podržane su dinamičke širine i precizne mogućnosti ANSI C printf () rutina. A * umesto specifikacija širine ili precizora, njihove vrijednosti se uzimaju sa liste argumenata na printf ili sprintf () . Da biste koristili odredišni položaj sa dinamičkom širinom ili preciznošću, navedite broj $ nakon * u nizu formata. Na primjer, "% 3 $ * 2 $. * 1 $ s" .

Posebna imena datoteka

Kada izvršavate preusmeravanje I / O iz štampanja ili printf-a u datoteku, ili preko getline-a iz datoteke, gawk prepoznaje određena posebna imena datoteka interno. Ova imena datoteka omogućavaju pristup otvorenim deskriptorima datoteka nasleđenim od roditeljskog procesa gawk -a (obično shell). Ova imena datoteka se takođe mogu koristiti u komandnoj liniji za imenovanje datoteka sa podacima. Filename su:

/ dev / stdin

Standardni ulaz.

/ dev / stdout

Standardni izlaz.

/ dev / stderr

Standardni greški.

/ dev / fd / n

Datoteka vezana za deskriptor otvorenog fajla n .

Ovo su posebno korisne za poruke o grešci. Na primjer:

Štampaj "Ti si ga upropastio!" > "/ dev / stderr"

dok biste inače morali da koristite

Štampaj "Ti si ga upropastio!" | "mačka 1> i 2"

Sledeća posebna imena datoteka mogu biti korišćena sa operaterom i kooperacijom za kreiranje TCP / IP mrežnih veza.

/ inet / tcp / lport / rhost / rport

Datoteka za TCP / IP konekciju na lokalnom portu prenosi na udaljeni host rhost na udaljenom portu rport . Koristite port od 0 da bi sistem odabrao port.

/ inet / udp / lport / rhost / rport

Slično, ali koristite UDP / IP umesto TCP / IP.

/ inet / raw / lport / rhost / rport

Rezervisano za buduću upotrebu.

Ostala posebna imena datoteka obezbeđuju pristup informacijama o pokretnom gawk procesu. Ove datoteke su sada zastarele. Koristite PROCINFO niz da biste dobili informacije koje pružaju. Filename su:

/ dev / pid

Čitanje ove datoteke vraća identifikaciju procesa tekućeg procesa, u decimalnom broju, okončano novom linijom.

/ dev / ppid

Čitanje ove datoteke vraća matični procesni ID tekućeg procesa, u decimalnom broju, prekinut novom linijom.

/ dev / pgrpid

Čitanjem ove datoteke vraća se ID procesa procesa tekućeg procesa, u decimalnom broju, prekinuta sa novom linijom.

/ dev / korisnik

Čitanje ove datoteke vraća jedan zapis koji se prekida sa novom linijom. Polja su odvojena razmacima. $ 1 je vrijednost sistemskog poziva getuid (2), $ 2 je vrijednost sistemskog poziva geteuid (2), $ 3 je vrijednost sistemskog poziva getgid (2), a $ 4 je vrijednost getegid (2) sistemski poziv. Ako postoje neka dodatna polja, oni su ID grupe grupe koje vraćaju grupe gg (2). Više grupa ne može biti podržano na svim sistemima.

Numeričke funkcije

AWK ima sledeće ugrađene aritmetičke funkcije:

atan2 ( y , x )

Vraća arktangent y / x u radijance.

cos ( expr )

Vraća kosinus ekspr , koji je u radijancima.

exp ( expr )

Eksponencijalna funkcija.

int ( expr )

Skraćuje do celog.

dnevnik ( expr )

Funkcija prirodnog logaritma.

rand ()

Vraća slučajni broj između 0 i 1.

greh ( expr )

Vraća sinus izraza , koji je u radijancima.

sqrt ( expr )

Funkcija kvadratnog korena.

srand ( [ expr ] )

Koristi expr kao novo seme za generator slučajnih brojeva. Ako ne postoji ekspres , koristi se vreme dana. Povratna vrednost je prethodno seme za generator slučajnih brojeva.

String funkcije

Gawk ima sledeće ugrađene string funkcije:

asort ( s [ , d ] )

Vraća broj elemenata u izvornom nizu s . Sadržaj s sortiran je pomoću normalnih pravila Gawk -a za upoređivanje vrijednosti, a indeksi sortiranih vrijednosti s zamjenjuju se sa sekvencijalnim brojevima počevši od 1. Ako je definisan opcioni odredišni niz d , onda se s prvo duplira u d , a zatim je d sortiran, ostavljajući indekse izvornog polja s nepromenjene.

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

Pretražite ciljnu tačku t za utakmice regularnog izraza r . Ako je h niz koji počinje sa g ili G , onda zamijenite sve utakmice r s s . U suprotnom, h je broj koji ukazuje na to koji se odraz r zameni. Ako se t ne isporučuje, umesto toga se koristi $ 0 . U tekstu zamjene s , sekvencu \ n , gde je n broj od 1 do 9, može se koristiti za označavanje samo teksta koji odgovara n -u podrazrenju zagonetki. Niz \ 0 predstavlja ceo odgovarajući tekst, kao i znak & . Za razliku od sub () i gsub () , modifikovani string se vraća kao rezultat funkcije, a originalni ciljni niz se ne menja.

gsub ( r , s [ , t ] )

Za svaku podstranicu koja odgovara redovnom izrazu r u nizu t , zamijenite string s i vratite broj zamjena. Ako t nije isporučen, koristite $ 0 . U & tekstu zamene zamenjen je tekstom koji je ustvari uparen. Koristite \ & da biste dobili bukvalno & . (Ovo mora biti uneto kao "\\ &" ; pogledajte GAWK: Efektivno AWK programiranje za potpuniju raspravu o pravilima za & s i krevom obrnuti u zamjenskom tekstu sub () , gsub () i gensub () .)

indeks ( s , t )

Vraća indeks stringa u nizu s , ili 0 ako t nije prisutan. (To znači da indikatori karaktera počinju od jednog.)

dužina ( [ s ] )

Vraća dužinu stringa , ili dužinu od 0, ako se s ne isporučuje.

utakmica ( s , r [ , a ] )

Vraća položaj u s gdje se pojavljuje regularni izraz r , ili 0 ako r nije prisutan, i postavlja vrijednosti RSTART i RLENGTH . Imajte na umu da je raspored argumenta isti kao i za ~ operator: str ~ re . Ako je niz a isporučen, a je obrisan i onda se elementi od 1 do n popunjavaju dijelovima s koji odgovaraju odgovarajućoj podizraziji u r . 0-ti element a sadrži deo s koji odgovara čitavom regularnom izrazu r .

split ( s , a [ , r ] )

Razdvaja string u niz a na regularnom izrazu r , i vraća broj polja. Ako je r izostavljen, umesto toga se koristi FS . Array a se prvo briše. Razdvajanje se ponaša identično sa podelom polja, opisanom gore.

sprintf ( fmt , expr -list )

Štampa expr-listu prema fmt-u , i vraća rezultujući niz.

strtonum ( str )

Pregleda str , i vraća svoju numeričku vrednost. Ako str počinje sa vodećim 0 , strtonum () pretpostavlja da je str oktalni broj. Ako str počinje sa vodećim 0x ili 0X , strtonum () pretpostavlja da je str heksadecimalni broj.

sub ( r , s [ , t ] )

Kao gsub () , ali samo prvi podudarajući podstran je zamenjen.

substr ( s , i [ , n ] )

Vraća najviše n-karakterne podloge s počinjući na i . Ako je n izostavljeno, koristi se ostatak s .

tolower ( str )

Vraća kopiju strune stringa, sa svim velikim slovima u str. Prevedenim u njihove odgovarajuće mala slova. Neafazni znakovi ostaju nepromenjeni.

toupper ( str )

Vraća kopiju string strita , a svi mala slova u str prevedu u odgovarajuće odgovarajuće velike suparnike. Neafazni znakovi ostaju nepromenjeni.

Funkcije vremena

Budući da jedna od primarnih upotreba AWK programa obrađuje datoteke dnevnika koji sadrže informacije o vremenskom žigu , gawk pruža sljedeće funkcije za dobijanje vremenskih maraka i njihovo formatiranje.

mktime ( datumpec )

Reverzuje datumpec u vremensku marku istog oblika koji je vratio systime () . Datepec je niz oblika YYYY MM DD HH MM SS [DST] . Sadržaj stringa je šest ili sedam brojeva koji predstavljaju cjelu godinu, uključujući vek, mjesec od 1 do 12, dan u mjesecu od 1 do 31, sat dana od 0 do 23, u minutu od 0 do 59, a drugi od 0 do 60, kao i opcionalna zastava sa letom. Vrednosti ovih brojeva ne moraju biti u okviru određenih opsega; na primer, sat -1 znači 1 sat pre ponoći. Pretpostavlja se nula gregorijanski kalendar, sa godinom 0 prethodne godine 1 i godine -1 prethodne godine 0. Vreme se pretpostavlja u lokalnom vremenskom zoni. Ako je sigurnosna lampica pozitivna, pretpostavlja se da je vrijeme letnje računanje vremena; ako je nula, pretpostavlja se da je vrijeme standardno; i ako je negativan (podrazumevano), mktime () pokušava da utvrdi da li je letnje računanje na snazi ​​u određeno vreme. Ako termin date ne sadrži dovoljno elemenata ili ako je rezultujuće vreme van dometa, mktime () vraća -1.

strftime ( [ format [ , vremenski znak ]] )

Formatira vremensku oznaku prema specifikaciji u formatu. Vremenska oznaka mora biti u istom obliku kao što je vratio systime () . Ako vremenska oznaka nedostaje, koristi se trenutno vreme dana. Ako nedostaje format , koristi se podrazumevani format koji odgovara izlazu datuma (1). Pogledajte specifikaciju funkcije strftime () u ANSI C za konverzije formata za koje je garantovano da su dostupne. Verzija javnog domena strftime (3) i man stranica za njega dolaze sa gawk ; ako je ta verzija korištena za izgradnju gawka , onda su sve konverzije opisane na ovoj strani čovjeka dostupne za gawk.

systime ()

Vraća trenutno vreme dana kao broj sekundi od Epoha (1970-01-01 00:00:00 UTC na POSIX sistemima).

Bit Manipulacije Funkcije

Počevši od verzije 3.1 gawk-a , dostupne su sledeće funkcije manipulacije bitova. Oni rade tako što pretvaraju vrednosti dvostruke preciznosti sa plutajućim tačkama na nepotpisane dugačke celine, obavljaju operaciju, a zatim konvertuju rezultat na plutajuću tačku. Funkcije su:

i ( v1 , v2 )

Vratite bitno i vrijednosti koje su dobili od v1 i v2 .

compl ( val )

Vratite bitni komplement val .

lshift ( val , broj )

Vratite vrijednost vala , pomjerite levo od brojčanih bitova.

ili ( v1 , v2 )

Vratite bitno IL vrijednosti koje su dobili od v1 i v2 .

rshift ( val , broj )

Vratite vrednost vala , pomerite se desno brojem bita.

xor ( v1 , v2 )

Vratite bitnu XOR vrijednosti koje su date od v1 i v2 .

Funkcije internacionalizacije

Počevši od verzije 3.1 gawk , u okviru vašeg AWK programa mogu se koristiti sljedeće funkcije za prevođenje žica u vrijeme izvršavanja. Za sve detalje pogledajte GAWK: Efektivno AWK programiranje .

bindtextdomain ( direktorijum [ , domen ] )

Određuje direktorij u kome gawk traži datoteke .mo , u slučaju da se neće ili ne mogu staviti u "standardne" lokacije (npr. Tokom testiranja). Vraća direktorijum u kojem je domen `` vezan. ''

Podrazumevani domen je vrijednost TEXTDOMAIN-a . Ako je direktorij null string ( "" ), onda bindtextdomain () vraća trenutnu vezu za datu domenu .

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

Vraća prevod niza u domenu tekstualnog domena kategorije kategorije . Podrazumevana vrednost za domen je trenutna vrijednost TEXTDOMAIN-a . Podrazumevana vrednost za kategoriju je "LC_MESSAGES" .

Ako isporučite vrednost za kategoriju , ona mora biti niz jednak jednoj od poznatijih kategorija lokala opisanih u GAWK: Efektivno AWK programiranje . Takođe morate dostaviti tekstualni domen. Koristite TEXTDOMAIN ako želite da koristite trenutni domen.

dcngettext ( string1 , string2 , broj [ , domen [ , kategorija ]] )

Vraća množinu formu koja se koristi za broj prevoda string1 i string2 u domenu tekstualnog domena kategorije kategorije . Podrazumevana vrednost za domen je trenutna vrijednost TEXTDOMAIN-a . Podrazumevana vrednost za kategoriju je "LC_MESSAGES" .

Ako isporučite vrednost za kategoriju , ona mora biti niz jednak jednoj od poznatijih kategorija lokala opisanih u GAWK: Efektivno AWK programiranje . Takođe morate dostaviti tekstualni domen. Koristite TEXTDOMAIN ako želite da koristite trenutni domen.

DEFINICIJE FUNKCIJE KORISNIKA

Funkcije u AWK-u su definisane na sledeći način:

ime funkcije ( lista parametara ) { izjave }

Funkcije se izvršavaju kada se pozivaju iz izraza u oba oblika ili postupaka. Aktuelni parametri koji se isporučuju u pozivu funkcije koriste se za instanciranje formalnih parametara prijavljenih u funkciji. Nizovi se prenose referencom, ostale varijable se prenose po vrijednosti.

Pošto funkcije nisu izvorno bile dio AWK jezika, odredba za lokalne varijable je prilično nespretna: oni su proglašeni dodatnim parametrima u listi parametara. Konvencija je da odvojite lokalne varijable od stvarnih parametara pomoću dodatnih mjesta u listi parametara. Na primjer:

funkcija f (p, q, a, b) # a i b su lokalna {...} / abc / {...; f (1, 2); ...}

Lijeća zagrada u pozivu funkcije je neophodno da odmah pratite naziv funkcije, bez ikakvog intervenog bijelog prostora. To je izbjegavanje sintaktičke dvosmjernosti sa operaterom konekcije. Ovo ograničenje se ne odnosi na ugrađene funkcije navedene gore.

Funkcije se mogu pozvati i mogu biti rekurzivne. Funkcijski parametri koji se koriste kao lokalne varijable se inicijaliziraju na null niz i broj nula po pozivu funkcije.

Koristite return expr da biste vratili vrijednost iz funkcije. Povratna vrijednost je nedefinirana ako nijedna vrijednost nije data, ili ako se funkcija vraća "pada" kraj.

Ako je obezbeđen - lint, gawk upozorava na pozive na nedefinisane funkcije u parse vrijeme, umesto na vreme rada. Pozivanje neodređene funkcije u vrijeme izvršavanja je fatalna greška.

Riječ func se može koristiti umesto funkcije .

DINAMIČNO NAPLAGANJE NOVIH FUNKCIJA

Počevši od verzije 3.1 gawk-a , možete dinamičkim dodavanjem novih ugrađenih funkcija izvršiti gawk tumač. Puni detalji su izvan okvira ovog priručnika; pogledajte GAWK: Efektivno AWK programiranje za detalje.

produžetak ( objekt , funkcija )

Dinamično povežite datoteku zajedničkog objekta imenom po objektu i pozovite funkciju u tom objektu da biste obavili inicijalizaciju. One bi trebalo da budu obezbeđene kao žice. Vraća vrednost vraćenu funkcijom .

Ova funkcija je obezbeđena i dokumentovana u GAWK: Efektivno AWK programiranje , ali se sve o ovoj osobini verovatno menja u sledećem izdanju. Mi STRONGGLY preporučujemo da ne koristite ovu funkciju za sve što niste spremni da ponovite.

SIGNALI

pgawk prihvata dva signala. SIGUSR1 prouzrokuje da uklanja profil i funkciju stack poziva u datoteku profila, što je ili awkprof.out , ili bilo koji fajl je imenovan sa opcijom --profile . Tada nastavlja da trči. SIGHUP dovodi do toga da smakne profil i funkciju pozivnog broja i zatim izađe.

PRIMERI

Štampajte i sortirajte imena za prijavljivanje svih korisnika: BEGIN {FS = ":"} {print $ 1 | "sortiraj"} Broj brojeva linija u fajlu: {nlines ++} END {print nlines} Precede svaku liniju po broju u fajlu: {print FNR, $ 0} Concatenate i broj linije (varijacija na temu): {print NR, $ 0}

Internalizacija

Konstante stringa su sekvence znakova zatvorenih u dvostrukim navodnicima. U okruženjima koja nisu u engleskom jeziku, moguće je označiti stringove u AWK programu kao zahtev prevoda na prirodni jezik. Takvi stringovi su označeni u AWK programu sa vodećim podvučnikom (`` _ ''). Na primjer,

gawk 'BEGIN {print "Zdravo, svet"} "

uvek ispisuje zdravo, svet . Ali,

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

možda će štampati bonjour, monde u Francuskoj.

Postoji nekoliko koraka u proizvodnji i pokretanju lokalizovanog AWK programa.

1.

Dodajte BEGIN akciju da biste dodijelili vrijednost promenljivoj TEXTDOMAIN-u da biste domen teksta postavili na ime pridruženo vašem programu.


BEGIN {TEXTDOMAIN = "myprog"}

Ovo omogućava gawk-u da pronađe .mo datoteku povezanu sa vašim programom. Bez ovog koraka, gawk koristi tekstualni domen, koji verovatno ne sadrži prevode za vaš program.

2.

Označite sve žice koje treba prevesti sa vodećim podvučicama.

3.

Ako je potrebno, koristite funkcije dcgettext () i / ili bindtextdomain () u svom programu, po potrebi.

4.

Pokrenite gawk --gen-po -f myprog.awk> myprog.po da biste generirali datoteku .po za vaš program.

5.

Obezbedite odgovarajuće prevode i napravite i instalirajte odgovarajući .mo datoteku.

Funkcije internacionalizacije su detaljno opisane u GAWK: Efektivno AWK programiranje .

Posix Compatibility

Primarni cilj za gawk je kompatibilnost sa POSIX standardom, kao i sa najnovijom verzijom UNIX awk-a . U tom cilju, gawk uključuje sljedeće korisničke vidljive osobine koje nisu opisane u AWK knjizi, ali su dio Bell Laboratories verzije awk i nalaze se u POSIX standardu.

Knjiga ukazuje na to da dodjeljivanje varijabli komandne linije vrši kada awk inače otvori argument kao datoteku, koja je nakon izvršenja BEGIN bloka. Međutim, u ranijim implementacijama, kada se takav zadatak pojavio pre bilo kojeg imena datoteke, dodjeljivanje bi se desilo prije pokretanja BEGIN bloka. Aplikacije su zavisile od ove "funkcije". Kada je awk promijenjen da bi se podudarala sa njegovom dokumentacijom, dodat je -v za dodeljivanje varijabli prije izvršavanja programa, kako bi se prilagodile aplikacijama koje su zavisile od starog ponašanja. (Ovu karakteristiku su dogovorili i Bell Laboratories i GNU programeri.)

Opcija -W za specifične funkcije implementacije je iz POSIX standarda.

Prilikom obrade argumenata, gawk koristi posebnu opciju `` - '' kako bi signalizirao kraj argumenata. U režimu kompatibilnosti, upozorava, ali na drugi način ignoriše nedefinisane opcije. U normalnoj operaciji, takvi argumenti se prenose na AWK program kako bi ga procesiralo.

Knjiga AWK ne definiše povratnu vrijednost srand () . POSIX standard ima povratak semena koji je koristio, kako bi omogućio praćenje sekvenci slučajnih brojeva. Stoga srand () u gawk takođe vraća svoje sadašnje seme.

Ostale nove funkcije su: Korišćenje više -f opcija (od MKS awk ); ENVIRON niz; \ a , i \ v escape sekvence (učinjeno prvobitno u gawk i vraćeno u verziju Bell Laboratories); tolower () i toupper () ugrađene funkcije (iz verzije Bell Laboratories); i specifikacije konverzije ANSI C u printf (učinjeno prvo u verziji Bell Laboratories).

Istorijske karakteristike

Postoje dve karakteristike istorijskih AWK implementacija koje gawk podržava. Prvo, moguće je pozvati funkciju length () ugrađenu ne samo bez argumenata, već čak i bez zagrada! Prema tome,

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

je isti kao i jedan od njih

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

Ova karakteristika je označena kao "zastarjela" u POSIX standardu, a gawk izdaje upozorenje o njegovoj upotrebi ako je u komandnoj liniji specificirano -lint .

Druga karakteristika je upotreba nastavaka za nastavak ili pauze izvan tijela za neko vrijeme , za ili za petlje. Tradicionalne implementacije AWK tretirale su takvu upotrebu kao ekvivalent sledećoj izjavi. Gawk podržava ovu upotrebu ako je naveden -traditional .

GNU ekstenzije

Gawk ima veliki broj proširenja za POSIX awk . Oni su opisani u ovom odeljku. Sve ovde opisane ekstenzije mogu biti onemogućene pozivanjem gawk-a sa - tradicionalnom opcijom.

Sledeće funkcije gawk- a nisu dostupne u POSIX awk-u .

*

Ne traži se pretraživanje puteva za datoteke nazvane putem opcije -f . Stoga varijabla okruženja AWKPATH nije posebna.

*

\ X escape sequence. (Onemogućeno sa --posix .)

*

Funkcija fflush () . (Onemogućeno sa --posix .)

*

Sposobnost da nastavite sa redovima ? i:. (Onemogućeno sa --posix .)

*

Oktalne i heksadecimalne konstante u AWK programima.

*

ARGIND , BINMODE , ERRNO , LINT , RT i TEXTDOMAIN varijable nisu posebni.

*

Varijabla IGNORECASE i njeni neželjeni efekti nisu dostupni.

*

FIELDWIDTHS varijabla i razdvajanje polja fiksne širine.

*

PROCINFO niz nije dostupan.

*

Korišćenje RS-a kao regularnog izraza.

*

Posebna imena datoteka dostupna za preusmeravanje I / O nisu prepoznata.

*

| & Operator za kreiranje ko-procesa.

*

Sposobnost podeliti pojedinačne znakove koristeći null string kao vrijednost FS-a , i kao treći argument za split () .

*

Opcioni drugi argument za funkciju close () .

*

Opcioni treći argument za matičnu () funkciju.

*

Mogućnost korištenja pozicijskih odredišta sa printf i sprintf () .

*

Korišćenje brisanja polja za brisanje celog sadržaja polja.

*

Korišćenje sledećeg fajla za odustajanje od obrade trenutne ulazne datoteke.

*

I () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () ili () , rshift () , strftime () , strtonum () , systime () i xor () funkcije.

*

Lokalizovane žice.

*

Dinamično dodavanje novih ugrađenih funkcija pomoću funkcije extension () .

Knjiga AWK ne definiše povratnu vrednost funkcije close () . Gawk 's close () vraća vrijednost iz fclose (3), ili pclose (3), pri zatvaranju izlazne datoteke ili cijevi, respektivno. Vraća status izlaznog procesa prilikom zatvaranja ulazne cevi. Povratna vrijednost je -1 ako imenovana datoteka, cijev ili su-proces nije otvorena sa preusmeravanjem.

Kada je gawk pozvan sa --traditional opcijom, ako je argument fs opciji -F opcija `` t '', onda je FS postavljen na znak tab. Imajte na umu da tipkanje gawk -F \ t ... jednostavno uzrokuje da shell navede `` t, '' i ne prolazi `` \ t '' u opciju -F . Pošto je ovo prilično ružan poseban slučaj, to nije podrazumevano ponašanje. Ovo ponašanje se ne pojavljuje ako je --posix određen. Da biste zaista dobili znak tabla kao separator polja, najbolje je koristiti pojedinačne citate: gawk -F '\ t' ....

Pogledajte ostale komande : wait , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , at , who , iwconfig , ifconfig , vgdisplay , open , lsmod , ntohs , mailq , kill , wtmp