Saznajte Linux Command - gawk

Ime

gawk - pattern skeniraju i obrađuju jezik

Sinopsis

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

pgawk [POSIX ili GNU stil opcije] -f program-datoteka [ - ] datoteka ...
pgawk [POSIX ili GNU stil opcije] [ - ] program-tekstualna datoteka ...

Opis

Gawk je implementacija GNU projekta AWK programskog jezika. Ona odgovara definiciji jezika u POSIX 1003.2 Command Language And Utilities Standardu. Ova inačica zauzvrat temelji se na opisu u AWK programskom jeziku , Aho, Kernighan i Weinberger, s dodatnim značajkama koje se nalaze u verziji UNIX awk sustava V Release 4. Gawk također nudi i novije ekstenzije Bell Laboratories awk i niz GNU-specifičnih ekstenzija.

Pgawk je profiliranje verzije gawk . To je identično na svaki način da gawk , osim da programi pokrenuti sporije, i automatski proizvodi izvršni profil u datoteci awkprof.out kada je učinjeno. Pogledajte opciju --profile u nastavku.

Komandna linija sastoji se od opcija za samostalno snimanje, teksta AWK programa (ako nije isporučen putem opcija -f ili --file ) i vrijednosti koje će biti dostupne u ARGC i ARGV unaprijed definiranim AWK varijablama.

Format opcije

Opcije Gawk mogu biti tradicionalne POSIX opcije jednog slova ili opcije GNU stila. POSIX opcije počinju s jednim `` - '', dok dugačke opcije počinju s `` - ''. Dostupne su opcije za obje značajke specifične za GNU i za POSIX značajke.

Slijedeći POSIX standard, gawk -specifične opcije dobivaju se putem argumenata na opciju -W . Moguće je nabaviti više opcija -W Opcije svake opcije -W imaju odgovarajuću dugu opciju, kako je opisano u nastavku. Argumente za dugim opcijama ili su pridružene opciji znakom a = , bez ikakvih razmaka, ili se mogu dati u sljedećem argumentu naredbenog retka. Duge opcije mogu se skratiti, sve dok kratica ostane jedinstvena.

Opcije

Gawk prihvaća sljedeće opcije, navedene abecednim redom.

-F fs

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

-v var = val

- assign var = val Dodjeljivanje vrijednosti val na varijablu var , prije početka izvođenja programa. Takve varijabilne vrijednosti dostupne su BEGIN bloku AWK programa.

-f program-datoteku

- datoteku datoteke datoteke Pročitajte izvor AWK programa iz datoteke programske datoteke , a ne iz prvog argumenta naredbenog retka. Može se koristiti više mogućnosti -f (ili --file ).

-mf NNN

-mr NNN Postavite različite granice memorije na vrijednost NNN . F zastava postavlja maksimalni broj polja, a r flag postavlja maksimalnu veličinu zapisa. Ove dvije zastavice i opcija -m dolaze iz verzije istraživanja Bell Laboratories UNIX awk . Oni ga zanemaruju jer gawk nema unaprijed definiranih granica.

-Pružaj

Tradicionalno

--compat

- Tradicionalni trčanje u načinu kompatibilnosti . U načinu kompatibilnosti, gawk se ponaša jednako kao UNIX awk ; nijedna od GNU-specifičnih ekstenzija nije prepoznata. Upotreba " tradicionalne " preferira se u odnosu na druge oblike ove opcije. Više informacija potražite u nastavku GNU EXTENSIONS .

-W kopija

-W autorska prava

--copyleft

--copyright Ispišite kratku verziju GNU poruke o autorskim pravima na standardni izlaz i izađite uspješno.

-W dump-variables [ = datoteka ]

--dump-variables [ = file ] Ispis sortiranog popisa globalnih varijabli, njihovih vrsta i konačnih vrijednosti u datoteku . Ako nema datoteke , gawk koristi datoteku pod nazivom awkvars.out u trenutnom direktoriju.

Imajući popis svih globalnih varijabli je dobar način za traženje tipografskih pogrešaka u vašim programima. Koristite tu opciju ako imate veliki program s puno funkcija i želite biti sigurni da vaše funkcije nehotice koriste globalne varijable koje ste mislili biti lokalni. (Ovo je naročito jednostavna pogreška u jednostavnim nazivima varijabli kao što su i , j itd.)

- Pomoć

-W upotreba

--Pomozite

--usage Ispis relativno kratkog sažetka dostupnih opcija na standardni izlaz. (Prema GNU standardima kodiranja , te opcije uzrokuju neposrednu i uspješnu izlaz.)

-W lint [ = kobno ]

- lint [ = fatal ] Pružite upozorenja o konstruktima koji su sumnjivi ili nisu prijenosni u implementacije drugihAWK. Uz dodatni argument kobne , upozorenja na pelene postaju fatalne pogreške. To može biti drastično, ali njegova uporaba zasigurno će potaknuti razvoj čistijih AWK programa.

-Beži

- staro-star Pruža upozorenja o konstrukcijama koje nisu prenosive u izvornu verziju Unix awk-a .

-W gen-po

--gen-po Skenirajte i analizirajte AWK program i generirajte datoteku GNU .po format na standardni izlaz s unosima za sve lokalizable nizove programa. Sam program se ne izvršava. Pogledajte distribuciju GNU gettexta za više informacija o .po datotekama.

-W ne decimalni podaci

- ne-decimalni podaci Prepoznajte oktalne i heksadecimalne vrijednosti u ulaznim podacima. Koristite ovu opciju s velikim oprezom!

-W posix

--posix Ovime se uključuje način kompatibilnosti s sljedećim dodatnim ograničenjima:

*

\ x escape sekvenci se ne prepoznaju.

*

Samo prostor i kartica djeluju kao razdjelnici polja kada je FS postavljen na jedan prostor, a novi redak ne.

*

Ne možete nastaviti redak nakon ? i :.

*

Funkcija sinonima ključne riječi nije prepoznata.

*

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

*

Fflush () funkcija nije dostupna.

-W profil [ = prof_file ]

--profile [ = prof_file ] Pošaljite profilne podatke prof_file . Zadana postavka je awkprof.out . Kada se pokreće s gawk , profil je samo "` prilično tiskana '' inačica programa. Kada se pokrene s pgawk , profil sadrži brojeve izvršenja svake izjave u programu na lijevoj margini i brojeve funkcija poziva za svaku funkciju koja je definirana od strane korisnika.

-W ponovno interval

- interval-interval Omogućite korištenje izraza intervala u podudaranju regularnog izraza (vidi Redovite izjave u nastavku). Intervalni izrazi nisu tradicionalno dostupni na AWK jeziku. Dodali su ih POSIX standard, kako bi awk i egrep bili međusobno konzistentni. Međutim, njihova upotreba vjerojatno će slomiti stare AWK programe, tako da gawk samo pruža ako se to zatraži s tom opcijom ili kada je naveden --poseb .

-W izvorni programski tekst

--source program-text Upotrijebite programski tekst kao izvorni kod programa AWK. Ova opcija omogućuje jednostavno miješanje knjižničnih funkcija (korištenih opcijama -f i --file ) s kodom unesenim izvornim kodom. Namijenjen je prvenstveno srednjim i velikim AWK programima koji se koriste u shell skriptama.

-W verzija

--verzija Ispišite informacije o verziji za ovu kopiju gawk na standardnom izlazu. To je korisno uglavnom za znanje je li trenutna kopija gawk na vašem sustavu ažurirana s obzirom na sve što distribuira Free Software Foundation. Ovo je također korisno pri prijavljivanju bugova. (Prema GNU standardima kodiranja , te opcije uzrokuju neposrednu i uspješnu izlaz.)

- Potpišite kraj opcija. To je korisno za dopuštanje dodatnih argumenata samim AWK programima da počnu s `` - ''. To se uglavnom odnosi na usklađenost s argumentom parsing konvencije koja koristi većina drugih POSIX programa.

U načinu kompatibilnosti, sve druge opcije označene su kao nevažeće, ali inače se zanemaruju. U normalnom radu, sve dok je programski tekst isporučen, nepoznate opcije se prenose na AWK program u ARGV polju za obradu. To je osobito korisno za pokretanje AWK programa putem mehanizma izvršnog interpretatora `` #! ''.

IZVRŠENJE PROGRAMA AWK

Program AWK sastoji se od niza uzoraka akcijskih izjava i dodatnih funkcionalnih definicija.

uzorak { action statements }

naziv funkcije ( popis parametara ) { izjave }

Gawk prvo čita programski izvor iz programske datoteke (ako je navedeno), od argumenata do izvora ili iz prvog argumenta koji nije opcija na naredbenom retku. Opcije -f i --source mogu se koristiti više puta u naredbenom retku. Gawk čita programski tekst kao da su svi tekstovi izvora i datoteka naredbenog retka spojeni zajedno. To je korisno za izgradnju knjižnica AWK funkcija, bez uključivanja u svaki novi AWK program koji ih koristi. Također pruža mogućnost miješanja funkcija biblioteke s programima naredbene linije.

Varijabla okruženja AWKPATH određuje put pretraživanja koji će se koristiti prilikom pronalaženja izvornih datoteka s opcijom -f . Ako ova varijabla ne postoji, zadani put je ".: / Usr / local / share / awk" . (Stvarni direktorij može varirati, ovisno o tome kako je izgrađen i instaliran gawk.) Ako naziv datoteke datiranoj opciji -f sadrži znak `` / '', ne izvodi se traženje puta.

Gawk izvršava AWK programe u sljedećem redoslijedu. Prvo se izvode sve zadatke varijable specificirane preko opcije -v . Dalje, gawk sastavlja program u unutarnji oblik. Zatim, gawk izvršava kôd u BEGIN blokovima (ako postoji) i nastavlja čitati svaku datoteku nazvanu u ARGV nizu. Ako na naredbenom retku ne postoje datoteke, gawk čita standardni unos.

Ako naziv datoteke na naredbenom retku ima oblik var = val, to se tretira kao dodjela varijable. Varijablu var bit će dodijeljena vrijednost val . (To se događa nakon pokretanja svih BEGIN blokova.) Dodjeljivanje varijable naredbenog retka je najkorisnije za dinamičko dodjeljivanje vrijednosti varijablama koje AWK koristi za kontrolu načina unosa u polja i zapise. Također je korisno za kontrolu države ako je potrebno više prolaza preko jedne podatkovne datoteke.

Ako je vrijednost određenog elementa ARGV prazna ( "" ), gawk preskače preko nje.

Za svaki zapis u ulazu, gawk ispituje da li se podudara s bilo kojim obrascem u AWK programu. Za svaki obrazac koji se podudara s rekordom izvršava se pridružena radnja . Uzorci se testiraju u redoslijedu koji se pojavljuju u programu.

Konačno, nakon iscrpljenog unosa, gawk izvršava kôd u blokovima END (ako postoji).

Varijable, zapise i polja

AWK varijable su dinamične; oni nastaju kada se prvi put koriste. Njihove vrijednosti su brojevi ili žice s pomičnim točkama ili oboje, ovisno o načinu na koji se koriste. AWK također ima jedno dimenzionalno polje; polja s višestrukim dimenzijama mogu se simulirati. Nekoliko unaprijed definiranih varijabli postavljeno je u programu; one će biti opisane kao potrebne i sažete u nastavku.

ploče

Normalno, zapisi se odvajaju novim znakovima. Možete upravljati načinom odvajanja zapisa dodjeljivanjem vrijednosti ugrađenoj varijabli RS . Ako RS ima bilo koji pojedinačni znak, taj znak odvaja zapise. Inače, RS je regularni izraz. Tekst u unosu koji odgovara ovom regularnom izrazu odvaja rekord. Međutim, u načinu kompatibilnosti koristi se samo prvi znak njegove vrijednosti niza za odvajanje zapisa. Ako je RS podešen na nulji niz, tada se zapisi odvajaju praznim redcima. Kad je RS podešen na nulji niz, novi redak uvijek djeluje kao razdjelnik polja, osim što god vrijednost FS može imati.

polja

Kako se čitaju svaki ulazni zapis, gawk dijeli rekord u polja , koristeći vrijednost FS varijable kao razdjelnik polja. Ako je FS jedan znak, polja su odvojena tim znakom. Ako je FS null niz, svaki pojedini znak postaje zasebno polje. Inače, FS se očekuje da bude puna regularni izraz. U posebnom slučaju da je FS jedno mjesto, polja se odvajaju rasporedom prostora i / ili kartica i / ili novih linija. (Ali pogledajte raspravu o "- položaju" , u nastavku). NAPOMENA: Vrijednost IGNORECASE (vidi dolje) također utječe na to kako se polja podijele kada je FS regularni izraz i kako su zapisi razdvojeni kada je RS regularni izraz.

Ako je varijabla FIELDWIDTHS postavljena na popis razmaka razdvojenih razmakom, očekuje se da će svako polje imati fiksnu širinu i gawk dijeli rekord pomoću navedene širine. Vrijednost FS zanemaruje se. Dodjeljivanje nove vrijednosti FS-u nadjačava korištenje FIELDWIDTHS i vraća zadano ponašanje.

Svako polje u ulaznom zapisu može se pozivati ​​na položaj, $ 1 , $ 2 i tako dalje. $ 0 je cijeli rekord. Polja ne moraju biti referencirana konstantama:

n = 5
ispisati $ n

ispisuje peto polje u ulaznom zapisu.

Varijabla NF postavljena je na ukupan broj polja u ulaznom zapisu.

Upućivanja na nepostojeća polja (tj. Polja nakon $ NF ) daju null-string. Međutim, dodjeljivanje neispunjenom polju (npr., $ (NF + 2) = 5 ) povećava vrijednost NF-a , stvara sva međusobna polja s nulskim nizom kao njihovu vrijednost i uzrokuje ponovnu izračunavanje vrijednosti od $ 0 polja se odvajaju po vrijednosti OFS . Pozivanje na negativna numerirana polja uzrokuje kobnu pogrešku. Smanjenje NF-a uzrokuje gubitak vrijednosti polja pored nove vrijednosti, a vrijednost od $ 0 koja će se ponovo kompenzirati, a polja se odvajaju vrijednostom OFS .

Dodjeljivanje vrijednosti postojećem polju uzrokuje da se cijeli zapis obnovi kada se poziva $ 0 . Slično tome, dodjeljivanje vrijednosti na $ 0 uzrokuje ponovno snimanje zapisa, stvarajući nove vrijednosti za polja.

Ugrađene varijable

Gawkove ugrađene varijable su:

ARGC

Broj argumenata naredbenog retka (ne uključuje opcije za gawk ili izvor programa).

ARGIND

Indeks u ARGV trenutne datoteke koja se obrađuje.

argv

Raspored argumenata naredbenog retka. Polje je indeksirano od 0 do ARGC - 1. Dinamički mijenjanje sadržaja ARGV može kontrolirati datoteke koje se koriste za podatke.

BINMODE

Na ne-POSIX sustavima, specificira korištenje "binarnog" načina za sve I / O datoteke. Numeričke vrijednosti od 1, 2 ili 3 određuju da ulazne datoteke, izlazne datoteke ili sve datoteke, trebaju koristiti binarnu I / O. String vrijednosti "r" ili "w" određuju da ulazne datoteke ili izlazne datoteke trebaju koristiti binarnu I / O. String vrijednosti "rw" ili "wr" navode da sve datoteke trebaju koristiti binarnu I / O. Svaka druga vrijednost niza se tretira kao "rw" , ali generira poruku upozorenja.

CONVFMT

Format pretvorbe brojeva "% .6g" prema zadanim postavkama.

okružiti

Niz koji sadrži vrijednosti trenutnog okruženja. Polje je indeksirano varijablama okoline, a svaki je element vrijednosti tog varijable (npr., ENVIRON ["HOME"] može biti / home / arnold ). Promjena ovog polja ne utječe na okolinu koju vide programi koje gawk mijenja putem preusmjeravanja ili funkcije sustava () .

errno

Ako dođe do greške u sustavu ili preusmjeravanjem za getline , tijekom čitanja za getline ili tijekom zatvaranja () , ERRNO će sadržavati niz koji opisuje pogrešku. Vrijednost podliježe prijevodu u ne-engleskim jezicima.

FIELDWIDTHS

Popis praznih površina odvojene u bijelom prostoru. Kada je postavljena, gawk analizira ulaz u polja fiksne širine, umjesto da se koristi vrijednost FS varijabli kao razdjelnik polja.

NAZIV DATOTEKE

Naziv trenutne ulazne datoteke. Ako nijedna datoteka nije navedena u naredbenom retku, vrijednost FILENAME je `` - ''. Međutim, FILENAME je nedefiniran unutar bloka BEGIN (osim ako je postavio getline ).

FNR

Broj unosa zapisa u tekućoj ulaznoj datoteci.

FS

Polje za unos polja prema zadanim postavkama. Pogledajte Polja iznad.

IGNORECASE

Kontrolira osjetljivost na slučaj svih redovitih ekspresije i operacija niza. Ako IGNORECASE ima vrijednost koja nije nula, onda se usporedbe niza i podudaranje uzoraka u pravilima, razdvajanje polja s FS , razdvajanje zapisa s RS , regularni izraz koji odgovara ~ i ! ~ I gensub () , gsub () , index () , podudaranje () , split () i sub () ugrađene funkcije sve ignoriraju slučaj prilikom redovitih ekspresijskih operacija. NAPOMENA: Ne utječe na deskriptiranje rasporeda, 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 sve regularne ekspresije i string operacije normalno razlikuju velika i mala slova. Pod Unixom, cijeli skup znakova ISO 8859-1 Latin-1 koristi se kada zanemaruje slučaj.

otpaci od prediva

Pruža dinamičku kontrolu opcije - uobičajenu unutar AWK programa. Kada je istina, gawk ispisuje upozorenja na boje. Kad je laž, to ne čini. Kada se vrijednost niza dodjeljuje "fatalnim" , upozorenja na pelene postaju fatalne pogreške, baš kao što je - fini = smrtonosna . Svaka druga istinska vrijednost samo ispisuje upozorenja.

NF

Broj polja u trenutnom unosu zapisa.

NR

Ukupan broj dosadašnjih ulaznih zapisa.

OFMT

Izlazni format brojeva "% .6g" prema zadanim je postavkama.

FSR

Izlazni razdjelni polje, prema zadanim postavkama.

ORS

Izlazni razdjelnik zapisa, prema zadanim postavkama novi redak.

PROCINFO

Elementi ovog polja omogućuju pristup informacijama o pokrenutom AWK programu. Na nekim sustavima u polju mogu postojati elementi, "group1" do "group n " za neke n , što je broj dodatnih grupa koje taj proces ima. Upotrijebite operatera u operateru da biste testirali te elemente. Dostupni su sljedeći elementi:

PROCINFO [ "egid"]

vrijednost getegid (2) sustavnog poziva.

PROCINFO [ "euid"]

vrijednost poziva sustava geteuid (2).

PROCINFO [ "FS"]

"FS" ako je u tijeku razdvajanje polja sa FS ili "FIELDWIDTHS" ako je u tijeku razdvajanje polja s FIELDWIDTHS .

PROCINFO [ "gid"]

vrijednost getgid (2) poziva sustava.

PROCINFO [ "pgrpid"]

ID procesne skupine trenutnog procesa.

PROCINFO [ "PID"]

ID procesa trenutnog procesa.

PROCINFO [ "ppid"]

ID nadređenog procesa trenutnog procesa.

PROCINFO [ "tekućem"]

vrijednost getuid (2) poziva sustava.

RS

Ulazni razdjelnik zapisa, prema zadanim postavkama novi redak.

RT

Zapisnik zapisa. Gawk postavlja RT na ulazni tekst koji odgovara znaku ili regularnom izrazu koji je odredio RS .

RSTART

Indeks prvog znaka koji odgovara podudaranju () ; 0 ako nema utakmica. (To znači da indeksi karaktera počinju na jednom.)

RLENGTH

Duljina niza podudaranja podudaranjem () ; -1 ako nema utakmica.

SUBSEP

Znak koji se upotrebljava za odvajanje više indeksa u elementima polja, prema zadanim postavkama "\ 034" .

TEXTDOMAIN

Domenu teksta AWK programa; koristi se za pronalaženje lokaliziranih prijevoda za nizove programa.

nizovi

Nizovi su podcrtani izrazom između kvadrata ( [ i ] ). Ako je izraz popis ekspresije ( expr , expr ...) onda je indeksni niz nizova koji se sastoji od povezivanja vrijednosti (stringa) svakog izraza, odvojene vrijednosti varijable SUBSEP . Ovaj objekt koristi se za simuliranje višestrukih dimenzioniranih polja. Na primjer:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "Pozdrav, svijet \ n"

dodjeljuje niz "hello, svijet \ n" elementu polja x koji je indeksiran stringom "A \ 034B \ 034C" . Sva polja u AWK su asocijativni, tj. Indeksirani niza vrijednosti.

Posebni operater u može se upotrijebiti u iskazu if or while kako bi se utvrdilo ima li polje indeks koji se sastoji od određene vrijednosti.

ako je (val in array) ispisni niz [val]

Ako polje ima više indeksa, upotrijebite (i, j) u polju .

U konstruktu se također može upotrijebiti u petlji da se iterira preko svih elemenata polja.

Element se može izbrisati iz polja pomoću obrisnog izričaja. Izbrisati izjavu također se može koristiti za brisanje cijelog sadržaja polja, samo određivanjem naziva polja bez indeksa.

Varijabilno tipkanje i konverzija

Varijable i polja mogu biti (floating point) brojevi ili žice ili oboje. Kako se vrijednost varijable tumači ovisi o njezinom kontekstu. Ako se koristi u numeričkom izrazu, on će biti tretiran kao broj, ako se koristi kao niz, bit će tretiran kao niz.

Da bi se promijenila varijabla koja se tretira kao broj, dodajte 0 njoj; prisiliti ga da se tretira kao niz, povezati ga nulim nizom.

Kada se niz mora pretvoriti u broj, konverzija se vrši pomoću strtoda (3). Broj se pretvara u niz pomoću vrijednosti CONVFMT kao string formata za sprintf (3), a brojčana vrijednost varijable kao argument. Međutim, iako su svi brojevi u AWK-u plutajućom točkom, integralne vrijednosti se uvijek pretvaraju u cijele brojeve. Dakle, dano

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

varijabla b ima vrijednost niza "12", a ne "12.00" .

Gawk vrši usporedbe kako slijedi: Ako su dvije varijable numeričke, uspoređuju ih numerički. Ako je jedna vrijednost numerička, a druga ima string vrijednost koja je `` numerički niz, '' tada se usporedbe također rade numericki. Inače, numerička vrijednost se pretvara u niz i izvodi se usporedba niza. Naravno, dvije žice se uspoređuju kao žice. Imajte na umu da POSIX standard primjenjuje koncept `` numeričkog stringa '' svugdje, čak i na konstante stringova. Međutim, ovo je očito netočno i gawk to ne čini. (Srećom, to je fiksno u sljedećoj verziji standarda.)

Imajte na umu da konstante niza, kao što je "57" , nisu numerički nizovi, to su string konstanti. Ideja `` numeričkog stringa '' odnosi se samo na polja, inputline , FILENAME , ARGV elemente, ENVIRON elemente i elemente polja stvorenog splitom () koji su numerički nizovi. Osnovna ideja je da se korisnički unos , a samo korisnički unos, koji izgleda numerički, treba tretirati na taj način.

Neinizializirane varijable imaju numeričku vrijednost 0 i vrijednost niza ("null" ili "empty" string).

Octalne i heksadecimalne konstante

Počevši od verzije 3.1 od gawk, možete koristiti oktralne i heksadecimalne konstante C u AWK programskom kodu. Na primjer, oktalna vrijednost 011 jednaka je decimalu 9 , a heksadecimalna vrijednost 0x11 jednaka decimalu 17.

String konstante

Stringne konstante u AWK su sekvenci znakova zatvorenih između dvostrukih navodnika ( " ). Unutar stringova prepoznaju se određene sekvence bijega , kao u C. To su:

\\

Doslovni povratni udarac.

\ a

Znak `` upozorenja ''; obično znak ASCII BEL.

\ b

backspace.

\ f

ulaganje obrasca.

\ n

nova linija.

\ r

povrat prtljage.

\ t

horizontalna kartica.

\ v

vertikalna kartica.

\ x hex znamenke

Karakter označen nizom heksadecimalnih znamenki nakon \ x . Kao u ANSIC-u, sve sljedeće heksadecimalne znamenke smatraju se dijelom slijeda bijega. (Ova bi značajka trebala reći nešto o jezičnom dizajnu od strane odbora.) Na primjer, "\ x1B" je znak ASCIIESC (escape).

\ ddd

Karakter označen s 1, 2 ili 3-znamenkasti niz oktalnih znamenki. Npr. "\ 033" je znak ASCII ESC (escape).

\ c

Doslovni lik c .

Sekvence bijega također se mogu koristiti unutar konstantnih regularnih izraza (npr., / [\ T \ f \ n \ r \ v] / odgovara veličini razmaka).

U načinu kompatibilnosti, znakovi predstavljeni oktalnim i heksadecimalnim escape sekvencama obrađuju se doslovno kada se koriste u regularnim konstantama ekspresije. Dakle, / a \ 52b / je ekvivalentan / a \ * b / .

Uzorci i radnje

AWK je linijski orijentirani jezik. Prvo je uzorak, a zatim akcija. Akcijske izjave su priložene u { i } . Možda nedostaje uzorak ili akcija možda nedostaje, ali, naravno, ne oboje. Ako obrazac nedostaje, radnja će se izvršiti za svaki unos zapisa. Akcija koja nedostaje je ekvivalentna

{print}

koji ispisuje cijeli zapis.

Komentari počinju znakom "#" i nastavljaju se do kraja retka. Prazne linije mogu se koristiti za odvajanje izjava. Normalno, izjava završava s novom linijom, međutim, to nije slučaj za linije koje završavaju u ``, '', { , ? ,,, && , ili || , Linije koje završavaju, inače imaju i njihove izjave koje se automatski nastavljaju na sljedećoj liniji. U drugim slučajevima, redak se može nastaviti tako da ga završi s ', u kojem slučaju novi redak će biti zanemaren.

Višestruke izjave mogu se staviti na jednu liniju razdvajanjem ih s ``; ''. To se odnosi na obje izjave unutar akcijskog dijela parova uzorka (uobičajeni slučaj) i na same izjave o uzorcima.

obrasci

AWK uzorci mogu biti jedan od sljedećih:

BEGIN END / regularni izraz / uzorak relacijskog izraza && pattern pattern || uzorak uzorka ? obrazac : uzorak ( uzorak ) ! pattern pattern1 , pattern2

BEGIN i END su dvije posebne vrste uzoraka koje nisu testirane na ulazu. Radni dijelovi svih BEGIN obrazaca spojeni su kao da su sve izjave napisane u jednom BEGIN bloku. One se izvršavaju prije nego što se čitanje bilo kojeg unosa. Slično tome, svi blokovi END spojeni su i izvršeni kada se iscrpi sve unos (ili kada se izvodi izlazna izjava). BEGIN i END obrasci ne mogu se kombinirati s drugim uzorcima u izrazima uzoraka. BEGIN i END obrasci ne smiju imati dijelove djelovanja koji nedostaju.

Za / regularni izraz / uzorci, povezana izjava se izvršava za svaki ulazni zapis koji odgovara regularnom izrazu. Regularni izrazi su isti kao i oni u egrep (1), i prikazani su u nastavku.

Relacijski izraz može koristiti bilo koji operator koji je definiran u nastavku u odjeljku o akcijama. Ove općenito provjeravaju odgovaraju li određena polja određene regularne izraze.

&& , || , i ! operatori su logički AND, logički OR i logično NOT, odnosno, kao u C. Oni procjenjuju kratki spoj, također kao u C, i koriste se za kombiniranje više primitivnih izraza uzoraka. Kao iu većini jezika, zagrade se mogu koristiti za promjenu redoslijeda evaluacije.

P: operator je poput istog operatora u C. Ako je prvi obrazac istinit, model koji se koristi za testiranje je drugi uzorak, inače je treći. Procjenjuje se samo jedan od drugog i trećeg uzorka.

Oblik1 , oblik2 obrasca izraza zove se raspon raspona . Podudara se sa svim ulaznim zapisima počevši od zapisa koji odgovara uzorku1 , i nastavlja se sve dok rekord ne odgovara uzorku2 . Ne kombinira se s bilo kojom drugom vrstom uzorka.

Regularni izrazi

Regularni izrazi su proširena vrsta pronađena u egrep . Sastoje se od sljedećih znakova:

c

odgovara ne-metakarakteru c .

\ c

odgovara doslovnom karakteru c .

,

odgovara bilo kojem znaku uključujući novi redak.

^

odgovara početku niza.

$

odgovara kraju niza.

[ abc ... ]

popis znakova odgovara bilo kojem od znakova abc ....

[^ abc ... ]

negiranog popisa znakova, odgovara bilo kojem znaku osim abc ....

r1 | r2

izmjena: odgovara r1 ili r2 .

r1r2

concatenation: utakmice r1 , a zatim r2 .

r +

odgovara jednom ili više r .

r *

odgovara nuli ili više r .

r ?

odgovara nuli ili jednom r .

( r )

grupiranje: utakmice r .

r { n }

r { n ,}

r { n , m } Jedan ili dva broja unutar braces označavaju izraz intervala . Ako postoji jedan broj u zagradama, prethodni regularni izraz r se ponavlja n puta. Ako postoje dva broja odvojena zarezom, r se ponavlja n do m puta. Ako postoji jedan broj nakon kojeg slijedi zarez, tada se r ponavlja najmanje n puta.

Intervalni izrazi dostupni su samo ako je na komandnoj liniji navedeno bilo - mjesto ili - interval intervala .

\ y

odgovara prazan niz na početku ili kraju riječi.

\ B

odgovara praznom nizu unutar jedne riječi.

\ <

odgovara praznom nizu na početku riječi.

\>

odgovara praznom nizu na kraju riječi.

\ w

odgovara bilo kojem elementu konstituirajuće riječi (slovo, znamenka ili podvlačnost).

\ W

podudara se s bilo kojim znakom koji nije sastavni dio riječi.

\ '

odgovara praznom nizu na početku međuspremnika (stringa).

\ '

odgovara praznom nizu na kraju međuspremnika.

Sekvence bijega koje vrijede u konstanta niza (vidi dolje) također su valjane u regularnim izrazima.

Klase karaktera su nova značajka uvedena u POSIX standardu. Klasa znakova je posebna notacija za opisivanje popisa znakova koji imaju određeni atribut, ali gdje se stvarni znakovi mogu razlikovati od države do države i / ili od znakova do skupa znakova. Na primjer, pojam onoga što je abecedni karakter razlikuje se u SAD-u i Francuskoj.

Klasa znakova vrijedi samo u regularnom izrazu unutar zagrada popisa znakova. Klase karaktera sastoje se od [: , ključne riječi koja označava klasu i :] . Znakovi karaktera definirani POSIX standardom su:

[: alnum:]

Alfanumerički znakovi.

[:alfa:]

Abeceda slova.

[:prazan:]

Znakovi prostora ili kartica.

[: CNTRL:]

Kontrolni znakovi.

[:broj:]

Numerički znakovi.

[: graf:]

Likovi koji su i ispisivi i vidljivi. (Prostor je moguće ispisati, ali nije vidljiv, a a oba.)

[:niži:]

Niži slovni abecedni znakovi.

[: print:]

Znakovi koji se mogu ispisati (znakovi koji nisu kontrolni znakovi.)

[: punct:]

Znakovi interpunkcije (znakovi koji nisu slovo, brojke, kontrolni znakovi ili znakovi razmaka).

[:prostor:]

Prostorne znakove (kao što su prostor, kartica i formfeed, da navedete nekoliko).

[:Gornji:]

Alfabetski znakovi velikih slova.

[: xdigit:]

Likovi koji su heksadecimalni brojevi.

Na primjer, prije POSIX standarda, da biste podudarali alfanumeričke znakove, morali biste pisati / [A-Za-z0-9] / . Ako je vaš skup znakova imao druge abecednim znakovima, ne bi ih se podudaralo, a ako se vaš lik postavlja drugačije nego ASCII, to možda neće ni podudarati s ASCII alfanumeričkim znakovima. S POSIX klasa znakova možete pisati / [[: alnum:]] / , a to odgovara abecednim i numeričkim znakovima u svojem skupu znakova.

Dvije dodatne posebne sekvence mogu se pojaviti na popisu znakova. To se odnosi na skupove znakova koji nisu ASCII, koji mogu imati pojedinačne simbole (zove se elementi za uspoređivanje ) koji su zastupljeni s više od jednog znaka, kao i nekoliko znakova koji su ekvivalentni za svrhu sortiranja ili razvrstavanja. (Na primjer, na francuskom, ekvivalentan je običan "e" i teška oznaena e. ")

Raspored simbola

Simbol uspoređivanja je element za uspoređivanje više znakova zatvoren u [. i .] . Na primjer, ako je ch element koji uspoređuje, [[.ch.]] Regularni je izraz koji odgovara ovom elementu uspoređivanja, dok je [ch] regularni izraz koji odgovara c ili h .

Ekvivalentne klase

Klasa ekvivalencije je lokalno specifičan naziv za popis znakova koji su ekvivalentni. Ime je zatvoreno u [= and =] . Na primjer, ime e može se koristiti za zastupanje svih "e", "e", "i" e "." U ovom slučaju, [[= e =]] je regularni izraz koji odgovara bilo kojem od e , e ' ili e` .

Ove su značajke vrlo korisne u lokalnim jezicima koji nisu engleski. Knjižnica funkcija koju gawk koristi za usklađivanje regularnih izraza trenutačno prepoznaje samo POSIX znakove; oni ne prepoznaju simbole sortiranja ili klase ekvivalencije.

Operatori \ y , \ B , \ < , \> , \ w , \ W , \ ` i \ ' su specifični za gawk ; to su proširenja koja se temelje na objektima u GNU regularnim knjižnicama.

Različite opcije naredbenog retka određuju kako gawk interpretira znakove u regularnim izrazima.

Nema opcija

U zadanom slučaju, gawk osigurava sve objekte POSIX regularnih izraza i operatera regularnog izraza GNU koji su gore opisani. Međutim, izrazi intervala nisu podržani.

--posix

Podržani su samo regularni izrazi POSIX, GNU operatori nisu posebni. (Na primjer, \ w odgovara doslovnom w ). Dopušteni su izrazi intervala.

--traditional

Tradicionalni Unix awk regularni izrazi se podudaraju. GNU operateri nisu posebni, izrazi intervala nisu dostupni, a ni POSIX znakovi ( [[: alnum:]] i tako dalje). Likovi opisani oktalnim i heksadecimalnim escape sekvencama obrađuju se doslovno, čak i ako predstavljaju regularni izraz metakaraktera.

--re-interval

Dopustite izraze intervala u regularnim izrazima, čak i ako je predviđeno - tradicionalno .

akcije

Akcije su zatvorene u zagradama, { i } . Radnje izjave sastoje se od uobičajenih izjava, uvjetnih i petlje koje se nalaze na većini jezika. Operatori, kontrolne izjave i izlazne / izlazne izjave dostupne su uzorkovane nakon onih u C.

operatori

Operatori u AWK, s obzirom na smanjenje prioriteta, jesu

( ... )

Grupiranje

$

Referenca na polje.

++ -

Povećanje i smanjenje, prefiks i postfix.

^

Eksponencijacija ( ** se također može koristiti i ** = za operatera zadatka).

+ -!

Unary plus, jednoliko minus i logička negacija.

* /%

Množenje, podjela i modul.

+ -

Dodatak i oduzimanje.

prostor

String spojnica.

<>

<=> =

! = == Redoviti relacijski operatori.

~! ~

Redovno podudaranje izraza, uskraćeno podudaranje. NAPOMENA: Nemojte koristiti konstantni regularni izraz ( / foo / ) na lijevoj strani ~ ili ! ~ . Koristite samo jednu s desne strane. Izraz / foo / ~ exp ima isto značenje kao (($ 0 ~ / foo /) ~ exp ) . Ovo obično nije ono što je bilo namijenjeno.

u

Članstvo u rasponu.

&&

Logička i.

||

Logička OR.

?:

Uvjetni izraz C. Ovo ima formu expr1 ? expr2 : expr3 . Ako je ekspr1 istinito, vrijednost izraza je expr2 , inače je expr3 . Procjenjuje se samo jedan od expr2 i expr3 .

= + = - =

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

Kontrolne izjave

Kontrolne izjave su kako slijedi:

( izričito ) izričaj [ izričito izjavu ] dok izjednačenje ( uvjet ) izjave }

I / O izjave

Izvodi ulaza / izlaza su sljedeći:

zatvoriti ( datoteka [ , kako ] )

Zatvorite datoteku, cijev ili kooperaciju. Opcionalno, kako se treba koristiti samo pri zatvaranju jednog kraja dvosmjerne cijevi u ko-proces. Mora biti vrijednost niza, ili "do" ili "od" .

getline

Postavite $ 0 iz sljedećeg unosa zapisa; postaviti NF , NR , FNR .

getline < datoteku

Postavite $ 0 iz sljedećeg zapisa datoteke ; postavite NF .

getline var

Postavi var od sljedećeg ulaznog zapisa; postaviti NR , FNR .

getline var < datoteku

Postavi var iz sljedećeg zapisa datoteke .

naredba | getline [ var ]

Run naredba cijevi izlaz u $ 0 ili var , kao gore.

naredba | & getline [ var ]

Pokreni naredbu kao koprodukcijski postupak koji cijevi izlaz u $ 0 ili var , kao što je gore navedeno. Co-procesi su produžetak.

Sljedeći

Prestani obraditi trenutni unos zapisa. Sljedeći ulazni zapis se očitava i obrada počinje s prvim obrascem u AWK programu. Ako se dođe do kraja ulaznih podataka, izvršit će se blokada koda (ako postoji).

nextfile

Prestanite obrađivati ​​trenutnu ulaznu datoteku. Sljedeći ulazni zapis proizlazi iz sljedeće ulazne datoteke. FILENAME i ARGIND ažurirani, FNR se vraća na 1, a obrada počinje s prvim obrascem u AWK programu. Ako se dođe do kraja ulaznih podataka, izvršit će se blokada koda (ako postoji).

otisak

Ispisuje trenutni zapis. Izlazni zapis je prekinut s vrijednošću ORS varijable.

ispis expr-popisa

Ispisuje izraze. Svaki je izraz odvojen od vrijednosti varijable OFS . Izlazni zapis je prekinut s vrijednošću ORS varijable.

ispis expr-list > datoteke

Ispisuje izraze u datoteci . Svaki je izraz odvojen od vrijednosti varijable OFS . Izlazni zapis je prekinut s vrijednošću ORS varijable.

printf fmt, expr-popis

Formatiranje i ispis.

printf fmt, expr-list > datoteku

Formatiranje i ispis u datoteci .

sustav ( cmd-line )

Izvršite naredbu cmd-line i vratite izlazni status. (Ovo možda nije dostupno na ne-POSIX sustavima.)

fflush ( [ datoteka ] )

Ispraznite sve pufere povezane s otvorenom izlaznom datotekom ili datotekom cijevi. Ako nedostaje datoteka , tada se standardni izlaz ispraznio. Ako je datoteka null string, sve otvorene izlazne datoteke i cijevi imaju svoje buffere.

Dopuštene su dodatne preusmjeravanja za ispis i printf .

ispisati >> >> datoteku

dodaje se izlaz u datoteku .

ispis ... | naredba

piše na cijevi.

ispis ... | i naredba

šalje podatke u ko-proces.

Naredba getline vraća 0 na kraju datoteke i -1 na pogrešku. Nakon pogreške, ERRNO sadrži niz koji opisuje problem.

NAPOMENA: Ako koristite cijev ili koprodukciju za line ili print ili printf unutar petlje, morate koristiti zatvoriti () da biste stvorili nove naredbe. AWK ne automatski zatvara cijevi ili ko-procesi kad vrate EOF.

Izjava ispisa

AWK verzije ispisa printf i sprintf () funkcija (vidi dolje) prihvaćaju sljedeće formate specifikacija pretvorbe:

% c

ASCII znak. Ako je argument koji se koristi za % c numerički, tretira se kao znak i ispisuje. U suprotnom se argument pretpostavlja da je riječ, a ispisuje se samo prvi znak tog niza.

% d , % i

Decimalni broj (cijeli dio).

% e,% E

Broj s pomičnim zarezom obrasca [-] d.dddddde [+ -] dd . Format % E koristi E umjesto e .

% f

Broj s pomičnim zarezom obrasca [-] ddd.dddddd .

% g,% G

Upotrijebite % e ili % f pretvorbu, ovisno što je kraće, s nestašnim nulama potisnutima. Format % G koristi % E umjesto % e .

% o

Neozbiljan oktalni broj (također cijeli broj).

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

% s

Niz znakova.

% x,% X

Nepotpisani heksadecimalni broj (cijeli broj). % X format koristi ABCDEF umjesto abcdef .

%%

Jedan znak % ; nema argumenata koji se pretvaraju.

Izborni, dodatni parametri mogu biti između % i kontrolnog pisma:

računati $

Upotrijebite argument ove stavke u ovom trenutku u oblikovanju. To se zove položajni specifikator i namijenjen je prvenstveno za prijevod u prevedenim inačicama stringova, a ne u izvornom tekstu AWK programa. To je produžetak.

-

Izraz treba biti opravdan u svom području.

prostor

Za numeričke konverzije prefiksajte pozitivne vrijednosti s razmakom i negativnim vrijednostima s minus znakom.

+

Dodatni znak, upotrijebljen prije modifikatora širine (vidi dolje), kaže da uvijek dostavlja znak za numeričke konverzije, čak i ako su podaci koji se formatiraju pozitivni. + Nadjačava izmjenjivač prostora.

#

Koristite `` zamjenski oblik '' za određena kontrolna slova. Za % o , dostavite vodeću nulu. Za % x i % X , unesite vodeći 0x ili 0X za rezultat koji nije nula. Za % e , % E i % f , rezultat uvijek sadrži decimalnu točku. Za % g , i % G , zimski neredovi se ne uklanjaju iz rezultata.

0

Vodeći 0 (nula) djeluje kao zastava, što znači da izlaz treba biti ispunjen nulama umjesto razmaka. To vrijedi čak i za ne-numeričke izlazne formate. Ova zastava ima učinak samo ako je širina polja veća od vrijednosti koju treba ispisati.

širina

Polje treba biti podignuto na tu širinu. Polje je normalno ispunjeno prostorima. Ako je upotrijebljena oznaka 0 , ona je ispunjena nulama.

, prec

Broj koji određuje preciznost korištenja prilikom ispisa. Za % e , % E i % f , to određuje broj znamenaka koje želite ispisati desno od decimalne točke. Za formate % g i % G određuje maksimalni broj značajnih znamenki. Za formate % d , % o , % i , % u , % x i % X određuje minimalni broj znamenki za ispis. Za % s navodi maksimalni broj znakova iz niza koji treba ispisati.

Podržane su dinamičke širine i pretpostavke ANSI C printf () rutine. A * umjesto širine ili prec specifikacije uzrokuje da se njihove vrijednosti uzmu iz popisa argumenta u printf ili sprintf () . Da biste upotrijebili određeni položaj s dinamičnom širinom ili preciznošću, isporučite broj $ nakon * u nizu formata. Na primjer, "% 3 $ * 2 $. * 1 $ s" .

Posebni nazivi datoteka

Prilikom preusmjeravanja I / O iz bilo kojeg ispisa ili printf-a u datoteku, ili preko getline iz datoteke, gawk interno prepoznaje posebne nazive datoteka. Ove nazive datoteka omogućuju pristup otvorenim deskriptorima datoteka naslijeđenim od roditeljskog postupka gawk (obično ljuska). Ove nazive datoteka također se mogu koristiti u naredbenom retku kako bi se imenovale datoteke podataka. Nazivi datoteka su:

/ dev / stdin

Standardni ulaz.

/ dev / stdout

Standardni izlaz.

/ dev / stderr

Izlaz standardne pogreške.

/ dev / fd / n

Datoteka povezana s otvorenim deskriptorom n .

To su osobito korisne za poruke o pogreškama. Na primjer:

print "Ti si puhao!" > "/ dev / stderr"

dok biste inače morali koristiti

print "Ti si puhao!" | "mačka 1 & 2"

Sljedeći posebni nazivi datoteka mogu se koristiti s operatorom & & co-procesorom za stvaranje TCP / IP mrežnih veza.

/ inet / tcp / lport / rhost / rport

Datoteka za TCP / IP vezu na lokalnom portu lport na udaljenom hostu rhost na udaljenom portu rport . Koristite luku 0 da sustav odabere priključak.

/ inet / udp / lport / rhost / rport

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

/ inet / raw / lport / rhost / rport

Rezervirano za buduću uporabu.

Ostali posebni nazivi datoteka omogućuju pristup informacijama o pokretanju postupka gawk . Ovi su nazivi datoteka zastarjeli. Koristite PROCINFO niz kako biste dobili informacije koje pružaju. Nazivi datoteka su:

/ dev / PID

Čitanje ove datoteke vraća ID procesa trenutnog procesa, u decimalnom, a završava novom linijom.

/ dev / ppid

Čitanje ove datoteke vraća ID nadređenog procesa trenutnog procesa, u decimalnom, prekinutom novom linijom.

/ dev / pgrpid

Čitanje ove datoteke vraća ID procesne grupe trenutnog procesa, u decimalnom, završenom novim linijama.

/ dev / korisnika

Čitanje ove datoteke vraća jedan zapis koji je prekinut novim linijama. Polja su odvojena razmakom. $ 1 je vrijednost getuid (2) poziva sustava, $ 2 je vrijednost poziva sustava geteuid (2), $ 3 je vrijednost getgid (2) poziva sustava, a $ 4 je vrijednost getegida (2) sustav poziva. Ako postoje neka dodatna polja, oni su grupni ID-ovi koje vraća getgroups (2). Na svim sustavima možda neće biti podržane više grupa.

Numeričke funkcije

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

atan2 ( y , x )

Vraća arctangent y / x u radijanima.

cos ( expr )

Vraća kosinus expr , koji je u radijanima.

exp ( expr )

Eksponencijalna funkcija.

int ( expr )

Truncates to integer.

log ( expr )

Funkcija prirodne logaritme.

Rand ()

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

grijeh ( expr )

Vraća sine expr , što je u radijanima.

sqrt ( expr )

Funkcija kvadratnog korijena.

srand ( [ expr ] )

Upotrebljava se kao novi sjeme generatora slučajnih brojeva. Ako nema expr , koristi se doba dana. Povratna vrijednost je prethodno sjeme generatora slučajnih brojeva.

String funkcije

Gawk ima sljedeće ugrađene niz funkcije:

asort ( s [ , d ] )

Vraća broj elemenata u izvornom nizu s . Sadržaji s razvrstavaju se uobičajenim pravilima gawk za uspoređivanje vrijednosti, a indeksi sortiranih vrijednosti s zamjenjuju se sekvencijskim brojevima, počevši od 1. Ako je navedeno neobvezno odredišno polje d , tada se s prvo kopira u d , a zatim se razvrstavaju, ostavljajući indekse izvornog polja nepromijenjene.

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

Tražite ciljni niz t za utakmice regularnog izraza r . Ako h je niz koji počinje s g ili G , zamijenite sve utakmice r s s . Inače, h je broj koji označava koji podudaranje r zamjenjuje. Ako se ne isporučuje, umjesto toga upotrebljava se 0 HRK . Unutar zamjenskog teksta, redoslijed \ n , gdje je n znamenka od 1 do 9, može se upotrijebiti za označavanje teksta koji se podudara s nižom zaglavljenom podekspresijom. Redoslijed \ 0 predstavlja cijeli podudarni tekst, kao i znak & . Za razliku od sub () i gsub () , izmijenjeni niz se vraća kao rezultat funkcije, a izvorni ciljni niz se ne mijenja.

gsub ( r , s [ , t ] )

Za svaki substring koji odgovara redovitom izrazu r u nizu t , zamijenite nizove s i vratite broj supstitucija. Ako t nije isporučen, upotrijebite $ 0 . Zamjena teksta zamijenjena je tekstom koji je zapravo bio podudaran. Upotrijebite \ & kako biste dobili doslovni & . (Ovo se mora upisati kao "\\ &" ; pogledajte GAWK: Učinkovito AWK programiranje radi potpunije rasprave o pravilima za & 's i backslashes u zamjenskom tekstu sub () , gsub () i gensub () .)

indeks ( s , t )

Vraća indeks niza t u nizu s , ili 0 ako t nije prisutan. (To znači da indeksi karaktera počinju na jednom.)

duljina ( [ s ] )

Vraća duljinu niza ili duljinu od 0 ako se ne isporučuje.

podudaranje ( s , r [ , a ] )

Vraća položaj u kojem redoviti izraz r pojavljuje, ili 0 ako r nije prisutan i postavlja vrijednosti RSTART i RLENGTH . Imajte na umu da je redoslijed argumenta isti kao i za operatora: str ~ re . Ako je polje a predviđeno, a se briše, a elementi 1 do n su ispunjeni s dijelovima s koji odgovaraju odgovarajućoj zagradnoj podizanju u r . 0'th element a sadrži dio s koji odgovara cijelom regularnom izrazu r .

split ( s , a [ , r ] )

Dijeli niz u nizu a na regularnom izrazu r i vraća broj polja. Ako je r izostavljen, FS umjesto toga koristi. Polje a je najprije uklonjeno. Cijepanje se ponaša jednako kao i gore opisano.

sprintf ( fmt , expr-list )

Ispisuje expr-listu prema fmt i vraća dobiveni niz.

strtonum ( str )

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

sub ( r , s [ , t ] )

Baš kao gsub () , ali samo je prva podudarna podniza zamijenjena.

substr ( s , i [ , n ] )

Vraća najmanji n- znakovni podnaslov koji počinje u i . Ako je n izostavljen, koristi se ostatak.

tolower ( str )

Vraća kopiju niza str , sa svim velikim slovima u str prevedenom na njihove odgovarajuće maloprodajne kolege. Non-abecedni znakovi ostaju nepromijenjeni.

toupper ( str )

Vraća kopiju niza str , sa svim nižim slovima na str u prijevodu na njihove odgovarajuće homologe velikih slova. Non-abecedni znakovi ostaju nepromijenjeni.

Vremenske funkcije

Budući da je jedna od primarnih primjena AWK programa obrada datoteka dnevnika s vremenskim oznakama, gawk pruža sljedeće funkcije za dobivanje vremenskih oznaka i njihovo oblikovanje.

mktime ( datespec )

Rurns datepec u vremensku marku istog oblika kao što je vratio systime () . Datumpec je niz oblika YYYY MM DD HH MM SS [DST] . Sadržaj niza je šest ili sedam brojeva koji predstavljaju punu godinu, uključujući stoljeće, mjesec od 1 do 12, dan u mjesecu od 1 do 31, sat od dana od 0 do 23, minuta od 0 do 59, a drugi od 0 do 60, te opcijsku zastavicu koja štedi ljetno vrijeme. Vrijednosti tih brojeva ne moraju biti unutar navedenih raspona; na primjer, sat -1 znači 1 sat prije ponoći. Pretpostavlja se podrijetlo nultog gregorijanskog kalendara, s godinom 0 koja prethodi godini 1 i godinom -1 koja prethodi godini 0. Vrijeme se pretpostavlja da je u lokalnoj vremenskoj zoni. Ako je zimska štedna žuta zvijezda pozitivna, vrijeme se pretpostavlja da je ljetno vrijeme; ako je nula, vrijeme se pretpostavlja da je standardno vrijeme; i ako je negativno (zadano), mktime () pokušava utvrditi da li je ljetno računanje vremena na snazi ​​za određeno vrijeme. Ako datespec ne sadrži dovoljno elemenata ili ako je vrijeme koje je rezultat izvan raspona, mktime () vraća -1.

strftime ( [ format [ , vremenska oznaka ]] )

Oblikuje vremensku oznaku prema specifikaciji u formatu. Vremenska oznaka mora biti istog obrasca koji je vraćen systime () . Ako nedostaje vremenska oznaka , koristi se trenutačno doba dana. Ako nema formata , koristi se standardni format koji odgovara izlazu datuma (1). Pogledajte specifikaciju za funkciju strftime () u ANSI C za formatne konverzije koje su zajamčene da će biti dostupne. Verzija strftime (3) za javnu domenu i mušku stranicu za koju dolazi s gawk ; ako je ta verzija upotrijebljena za izradu gawk , tada će sve konverzije opisane na toj muškoj stranici biti dostupne za gawk.

systime ()

Vraća trenutačno doba dana kao broj sekundi od epoha (1970-01-01 00:00:00 UTC na POSIX sustavima).

Bit Manipulacijske funkcije

Počevši s inačicom 3.1 od gawk , dostupne su sljedeće funkcije manipuliranja manjom bitom. Oni rade pretvaranjem dvostruko preciznih vrijednosti s pomičnim zarezom na nepotpisane dugo cijele brojeve, izvršavajući operaciju, a zatim pretvarajući rezultat natrag u pomične točke. Funkcije su:

i ( v1 , v2 )

Vratite bitni AND vrijednosti koje su dobile v1 i v2 .

compl ( val )

Vratite bitni dodatak val .

lshift ( val , count )

Vratite vrijednost val , prebačenu lijevo od broja bita.

ili ( v1 , v2 )

Vratite bitni OR vrijednosti dobivenih s v1 i v2 .

rshift ( val , count )

Vratite vrijednost val , prebačenu desno po bita.

xor ( v1 , v2 )

Vratite bitni XOR vrijednosti dobivenih s v1 i v2 .

Internacionalizacijske funkcije

Počevši s inačicom 3.1 od gawk , u vašem AWK programu mogu se koristiti sljedeće funkcije za prevođenje žice u vrijeme izvođenja. Za potpune pojedinosti pogledajte GAWK: Učinkovito AWK programiranje .

bindtextdomain ( direktorij [ , domena ] )

Određuje direktorij gdje gawk traži .mo datoteke, u slučaju da se neće ili ne smiju nalaziti na "standardnim" mjestima (npr. Tijekom testiranja). Vraća direktorij gdje je domena "vezana".

Zadana je domena vrijednost TEXTDOMAIN . Ako je direktorij null niz ( "" ), tada bindtextdomain () vraća trenutačno vezanje za domenu .

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

Vraća prijevod niza u domenu domene teksta za kategoriju kategorije lokalne mreže. Zadana vrijednost za domenu je trenutna vrijednost TEXTDOMAIN . Zadana vrijednost za kategoriju je "LC_MESSAGES" .

Ako opskrbljujete vrijednost za kategoriju , mora biti niz koji je jednak jednoj od poznatih kategorija lokacija opisanih u GAWK: Effective AWK Programming . Morate također dostaviti domenu teksta. Upotrijebite TEXTDOMAIN ako želite upotrebljavati trenutačnu domenu.

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

Vraća oblik množine koji se koristi za broj prijevoda string1 i string2 u domenu domene teksta za kategoriju kategorije lokalne mreže. Zadana vrijednost za domenu je trenutna vrijednost TEXTDOMAIN . Zadana vrijednost za kategoriju je "LC_MESSAGES" .

Ako opskrbljujete vrijednost za kategoriju , mora biti niz koji je jednak jednoj od poznatih kategorija lokacija opisanih u GAWK: Effective AWK Programming . Morate također dostaviti domenu teksta. Upotrijebite TEXTDOMAIN ako želite upotrebljavati trenutačnu domenu.

POSTOJEĆE FUNKCIJE KORISNIKA

Funkcije u AWK definirane su kako slijedi:

naziv funkcije ( popis parametara ) { izjave }

Funkcije se izvode kada se pozivaju unutar izraza u oba uzorka ili akcije. Stvarni parametri nabavljeni u funkcijskom pozivu koriste se za instantiiranje formalnih parametara koji su deklarirani u funkciji. Rasporedi se prosljeđuju prema referenci, a druge varijable se prenose prema vrijednosti.

Budući da funkcije nisu izvorno dio AWK jezika, odredba za lokalne varijable je prilično nespretna: oni su proglašeni kao dodatni parametri u popisu parametara. Konvencija je odvojiti lokalne varijable od stvarnih parametara dodatnim prostorima u popisu parametara. Na primjer:

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

Lijeva zagrada u funkcijskom pozivu potrebno je odmah pratiti naziv funkcije, bez ikakvog intervenirajućeg bijelog prostora. To je da se izbjegne sintaktička dvosmislenost s operaterom spajanja. To se ograničenje ne odnosi na gore navedene ugrađene funkcije.

Funkcije se mogu međusobno zvati i mogu biti rekurzivne. Parametri funkcije koji se koriste kao lokalne varijable su inicijalizirani na null niz i nulti broj na poziv funkcije.

Upotrijebite povratni izraz expr da biste vratili vrijednost iz neke funkcije. Vrijednost povratka je nedefinirana ako nema vrijednosti ili ako se funkcija vraća na kraju `` pada ''.

Ako je navedeno - gawk upozorava o pozivima na nedefinirane funkcije u vrijeme parsiranja, umjesto na vrijeme izvođenja. Pozivanje neodređene funkcije pri izvođenju vremena je kobna pogreška.

Riječ func može se koristiti umjesto funkcije .

DYNAMICALLY LOADING NEW FUNCTIONS

Počevši s verzijom 3.1 od gawk , dinamički možete dodati nove ugrađene funkcije pokretnom interpreteru za gawk . Puni detalji su izvan opsega ove priručničke stranice; pogledajte GAWK: Učinkovito AWK programiranje za detalje.

proširenje ( objekt , funkcija )

Dinamički povezuj zajedničku datoteku objekta nazvanu objektom i zazivanje funkcije u tom objektu za izvođenje inicijalizacije. Ove bi obje trebale biti predviđene kao nizovi. Vraća vrijednost vraćenu funkcijom .

Ova funkcija je osigurana i dokumentirana u GAWK: Učinkovito AWK programiranje , ali sve o ovoj značajci vjerojatno će se promijeniti u sljedećem izdanju. Čvrsto preporučujemo da ovu značajku ne koristite ni za što što ne želite ponoviti.

SIGNALI

pgawk prihvaća dva signala. SIGUSR1 uzrokuje da izbaci profil i funkciju stanja poziva u datoteku profila, koja je ili awkprof.out ili bilo koju datoteku imenovana s opcijom --profile . Zatim se nastavlja prikazivati. SIGHUP uzrokuje da izbaci profil i funkcionira stog poziva, a zatim izlazi.

PRIMJERI

Ispišite i poredajte imena za prijavu svih korisnika: BEGIN {FS = ":"} {print $ 1 | "sort"} Upišite redove u datoteci: {nlines ++} END {print nlines} Prelazi svaki redak po broju u datoteci: {print FNR, $ 0} Spoj i redni broj (varijacija na temu): {print NR, $ 0}

internalizacija

Stringne konstante su sekvencije znakova zatvorenih u dvostrukim navodnicima. U okruženjima koja nisu engleskog jezika, moguće je označiti nizove u AWK programu koji zahtijevaju prevođenje na prirodni prirodni jezik. Takve žice su označene u AWK programu s vodećom podvlakom (`_ ''). Na primjer,

gawk 'BEGIN {print "hello, world"} "

uvijek ispisuje hello, svijet . Ali,

gawk 'BEGIN {print _ "hello, svijet"} "

mogu ispisati bonjour, monde u Francuskoj.

Postoji nekoliko koraka u proizvodnji i pokretanju lokaliziranog AWK programa.

1.

Dodajte BEGIN radnju da biste dodijelili vrijednost varijabli TEXTDOMAIN da biste postavili domenu teksta na naziv povezan s vašim programom.


BEGIN {TEXTDOMAIN = "myprog"}

To vam omogućuje da pronađete .mo datoteku povezanu s vašim programom. Bez ovog koraka, gawk koristi tekstualnu domenu poruke , koja vjerojatno ne sadrži prijevode za vaš program.

2.

Označite sve nizove koji trebaju biti prevedeni s vodećim podvlakama.

3.

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

4.

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

5.

Navedite odgovarajuće prijevode i izradite i instalirajte odgovarajuću .mo datoteku.

Značajke internacionalizacije detaljno su opisane u GAWK: Effective AWK Programming .

Kompatibilnost s Posixom

Primarni cilj za gawk je kompatibilnost s POSIX standardom, kao i najnovijom verzijom UNIX awk . U tu svrhu, gawk uključuje sljedeće korisne vidljive značajke koje nisu opisane u AWK knjizi, ali su dio verzije awk iz Bell Laboratories i nalaze se u POSIX standardu.

Knjiga pokazuje da se dodjeljivanje varijable naredbenog retka događa 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 pred nekim nazivima datoteka, dodjela će se dogoditi prije nego što se BEGIN blok pokrene. Aplikacije su ovisile o ovoj `` značajki. '' Kad je awk promijenjen kako bi se prilagodio njegovoj dokumentaciji, dodana je -v opcija za dodjeljivanje varijabli prije izvršenja programa kako bi se prilagodile aplikacije koje su ovisile o starom ponašanju. (Ova značajka dogovorili su i Bell Laboratories i GNU programeri.)

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

Kada obrađuju argumente, gawk koristi posebnu opciju `` - '' za signalizaciju završetka argumenata. U načinu kompatibilnosti upozorava, ali inače zanemaruje nedefinirane opcije. U normalnom postupku, takvi argumenti prenose se AWK programu za obradu.

AWK knjiga ne definira povratnu vrijednost srand () . POSIX standard je vratio sjeme koje je koristio, kako bi se omogućilo praćenje slučajnih nizova. Stoga srand () u gawk također vraća svoje trenutno sjeme.

Ostale nove značajke su: korištenje više opcija (od MKS awk ); ENVIRON niz; sekvence \ a , i \ v escape (učinjeno izvorno u gawk i ponovno se vraća u Bell Laboratories verziju); funkcije tolower () i toupper () (iz verzije Bell Laboratories); i specifikacije za pretvorbu ANSI C u printf (učinjeno prvo u verziji Bell Laboratories).

Povijesne značajke

Postoje dvije značajke povijesnih AWK implementacija koje gawk podržava. Prvo, moguće je pozvati duljinu () ugrađenu funkciju ne samo bez argumenata, već čak i bez zagrada! Tako,

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

je isto kao i bilo

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

Ova je značajka označena kao `` obustavljena '' u POSIX standardu, a gawk izdaje upozorenje o njegovoj upotrebi ako je navedeno u naredbenom retku.

Druga značajka je uporaba bilo nastavka ili prijelomnih izjava izvan tijela od neko vrijeme , ili za petlje. Tradicionalna implementacija AWK-a odnosila se na takvu upotrebu koja je ekvivalentna sljedećoj izjavi. Gawk podržava tu upotrebu ako je specificirana - tradicionalna .

GNU proširenja

Gawk ima niz proširenja za POSIX awk . Opisani su u ovom odjeljku. Sva ovdje opisana proširenja mogu se onemogućiti pozivajući gawk s opcijom - tradicionalnim .

Sljedeće značajke gawk nisu dostupne u POSIX awk .

*

Nijedan put ne traži se za datoteke nazvane putem opcije -f . Stoga varijabla okruženja AWKPATH nije posebna.

*

\ X escape sequence. (Onemogućeno s --posm .)

*

Fflush () funkcija. (Onemogućeno s --posm .)

*

Sposobnost nastavka linije nakon ? i :. (Onemogućeno s --posm .)

*

Octalne i heksadecimalne konstante u AWK programima.

*

Varijable ARGIND , BINMODE , ERRNO , LINT , RT i TEXTDOMAIN nisu posebne.

*

Varijabla IGNORECASE i njegovi nuspojavi nisu dostupni.

*

Podjela terena FIELDWIDTHS varijable i fiksne širine.

*

Polje PROCINFO nije dostupno.

*

Upotreba RS kao regularnog izraza.

*

Posebni nazivi datoteka dostupni za preusmjeravanje I / O nisu prepoznati.

*

Operator za stvaranje ko-procesa.

*

Sposobnost razdvajanja pojedinačnih znakova pomoću nulskog niza kao vrijednosti FS , i kao treći argument za podjelu () .

*

Dodatni drugi argument za funkciju close () .

*

Dodatni treći argument za funkciju podudaranja () .

*

Mogućnost korištenja položajnih specifikacija s printf i sprintf () .

*

Upotreba brisanja polja za brisanje cijelog sadržaja polja.

*

Upotreba sljedećeg zapisa za odustajanje od obrade trenutne ulazne datoteke.

*

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

*

Lokalizable žice.

*

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

Knjiga AWK ne definira povratnu vrijednost funkcije close () . Gawk 's close () vraća vrijednost fclose (3), ili pclose (3), pri zatvaranju izlazne datoteke ili cijevi. Prilikom zatvaranja ulazne cijevi vraća izlazni status procesa. Povratna vrijednost je -1 ako naredna datoteka, cijev ili kooperacijski postupak nije otvoren s preusmjeravanjem.

Kad se zovemo gawk s --traditional opcijom, ako je argument fs na opciju -F je `` t '', FS je postavljen na znak kartice. Imajte na umu da upisivanje gawk-F \ t ... jednostavno uzrokuje shell da citirati `` t, '', a ne prođe `` \ t '' na -F opciju. Budući da je riječ o prilično ružnom posebnom slučaju, to nije zadano ponašanje. Ovo se ponašanje također ne pojavljuje ako je naveden --posis . Da biste doista dobili znak kartice kao razdjelnik polja, najbolje je upotrijebiti pojedinačne navodnike: gawk -F '\ t' ....

Pogledajte druge naredbe : pričekajte , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , na , tko , iwconfig , ifconfig , vgdisplay , otvoren , lsmod , ntohs , mailq , ubiti , wtmp