Learje de Linux Kommando - gawk

Namme

Gawk - ôfbylding foar scannen en ferwurkjen

Synopsis

gawk [POSIX of GNU- stylopsjes ] -f programma-bestân [ - ] triem ...
gawk [POSIX of GNU-styl-opsjes] [ - ] programma-tekstbestân ...

pgawk [POSIX of GNU-styl-opsjes] -f programma-bestân [ - ] bestân ...
pgawk [POSIX of GNU-styl opsjes] [ - ] programma- triemtriem ...

Beskriuwing

Gawk is de útfiering fan 'e GNU- projekt fan' e programma's fan 'e AWK. It befettet de definysje fan 'e taal yn' e POSIX 1003.2 Befestigings taal en utilities standert. Dizze ferzje is basearre op 'e beskriuwing yn' e programma 's AWK , troch Aho, Kernighan en Weinberger, mei de ekstra funksjes dy't fûn binne yn' e System V Release 4 ferzje fan UNIX awk . Gawk biedt ek mear resinte Bell Laboratories awk- útwreidingen, en in tal GNU-spesifike útwreidingen.

Pgawk is de profilearjende ferzje fan gawk . It is identyk yn elke manier nei gawk , útsein dat programma's langer leare, en it makket automatysk in útfierprofyl yn 'e triem awkprof.out doe't it dien is. Sjoch de --profile- opsje, hjirûnder.

De kommando-rigel bestiet út opsjes om sels te wurden, de programma tekst AWK (as net fia de -f of -file- opsjes levere wurdt), en wearden dy beskikber wurde yn 'e ARGC- en ARGV- foarôfgeande AWK-fariabelen.

Opmaakformaat

Gawk- opsjes kinne jo tradysjonele POSIX-ien letter-opsjes, of GNU-styl-lange opsjes. POSIX-opsjes begjinne mei in ien `` - '', wylst langere opsjes begjinne mei `` - ''. Lange opsjes binne foar sawol GNU-spesifike funksjes as foar POSIX-mandele funksjes beskikber.

Nei it pOSIX-standert wurde gawk -specific-opsjes oer arguminten oan 'e -W- opsje levere. Mear -W- opsjes kinne oanleverje wurde De -W- opsje hat in oerienkommende lange opsje, lykas hjirûnder wiidweidich. Arguminten foar lange opsjes wurde oanmakke mei de opsje troch in = teken, sûnder yntervende spaasjes, of se kinne bepaald wurde yn it kommende argumint fan kommende linen. Lange mooglikheden kinne ôfkoarte wurde, salang't de ôfkoarting unyk is.

Opsjes

Gawk akseptearret de neikommende opsjes, alfabetysk litte.

-F fs

--field-separator fs Brûk fs foar de ynfierfjild-skiedingstafel (de wearde fan 'e FS foarôfgeande fariabele).

-v var = val

--assign var = val Jou de weardeval oan 'e fariabele var , foardat de útfiering fan it programma begjint. De fariabele wearden binne beskikber foar de BEGIN- blok fan in AWK-programma.

-f programma-bestân

- triemprogramma - bestel lêze Lês de AWK-programma-boarne fan 'e triem- programma-bestân , ynstee fan it earste kommando-lijksargumint. Multiple -f (of -file ) opsjes kinne brûkt wurde.

-mf NNN

-mr NNN Set ferskate ûnthâldberjochten oan de wearde NNN . De flagge f sets it maksimale oantal fjilden, en de r flag makket de maksimale opmaakgrutte. Dizze twa flaggen en de -m- opsje binne út de Bell Laboratories ûndersyksferzje fan UNIX awk . Se wurde ignorearre troch gawk , om't gawk gjin fêste definysjes hat.

-W kompatibel

-W tradisjonele

--compat

--traditional Fiere yn kompatibiliteitmodus . Yn kompatibiliteit modus behannelet gawk identysk mei UNIX awk ; gjin fan 'e GNU-spesifike útwreidingen wurde erkend. It gebrûk fan --traditional wurdt foarkommen oer de oare foarmen fan dizze opsje. Sjoch GNU EXTENSIONS , ûnder, foar mear ynformaasje.

-W copyleft

-W auteursrjocht

--copyleft

--Copyright Printsje de koarte ferzje fan it GNU- urljochtingsynformaasje berjocht op 'e standertútfier en súksesfol út.

-W dump-fariabelen [ = bestân ]

--dump-fariabelen [ = bestân ] Printsje in soarte list fan globale fariabelen, harren soarten en definitive wearden om te bestannen . As der gjin triem beskikber is, brûkt gawk in triem mei de namme awkvars.out yn it aktive triemtafel.

In list mei alle globale fariabelen is in goede manier om te typen foar typografyske flateren yn jo programma's. Jo soenen ek dizze opsje brûke as jo in grut programma hawwe mei in soad funksjes, en jo wolle der wis fan wêze dat jo funksjes net globaal gebrûk meitsje fan globale fariabelen dy't jo wiene om lokale te wêzen. (Dit is in benammen maklik fout om te meitsjen mei ienfâldige fariabelen nammen lykas ik , j , en sa.)

-W help

-W gebrûk

--help

--usage Print in relatyf koarte gearfetting fan de beskikbere opsjes op 'e standertútfier. (Per de GNU-koadende standerts bringe dizze opsjes in direkte, suksesfolle útgong.)

-W lint [ = fatal ]

--lint [ = fatal ] Gebe warskôgings oer konstruksjes dy't dubiis of net-portable binne foar oareAWK-ymplementaasjes. Mei in fakultatyf argumint fan fatalen , lint warskôgings wurde fatale fouten. Dit kin drastysk wurde, mar har gebrûk sil de ûntwikkeling fan sawater AWK-programma 's willekeurich stimulearje.

-W lint-âld

--lint-âld Soargje warskôgings oer konstruksjes dy't net portable binne foar de orizjinele ferzje fan Unix awk .

-W gen-po

--gen-po Scan en parse it programma AWK, en generearje in standertútfier fan GNU .po- formaat mei yndrukken foar alle lokalisearbere snaren yn it programma. It programma sels wurdt net útfierd. Sjoch de GNU- gettext- distribúsje foar mear ynformaasje oer .po- bestannen.

-W non-decimal-data

--non-desimal-data oantsjutte oktale en hexadezimalwearden yn ynputgegevens. Brûk dizze opsje mei geweldige vorsicht!

-W posiks

--posysje Dit feroaret op kompatibiliteitmodus , mei de folgjende oanfoljende beheinings:

*

\ x fluchtoetsen wurde net erkend.

*

Allinnich romte en ljepblêd aktyf as fjildparreners as FS op in ienige romte ynsteld is, de reklame is net.

*

Jo kinne net linen trochgean ? en:.

*

De synonym func foar de keywordfunksje wurdt net erkend.

*

De operators ** en ** = kinne net brûkt wurde yn plak fan ^ en ^ = .

*

De fflush () -funksje is net beskikber.

-W profyl [ = prof_file ]

- profilen [ = prof_file ] Ferstjoeren profilearjen gegevens nei prof_file . De standert is awkprof.out . As jo ​​mei gawk laitsje , is it profyl allinnich in `` moaie gedruckte '' ferzje fan it programma. As jo ​​mei pgawk útfiere , befettet it profylbefolking fan elke deklaraasje yn it programma yn 'e linker marzje en funksjoneel oanroppen foar elke brûker-define funksje.

-W re-interval

--re-ynterval It brûken fan ynterval-ekspresjes yn reguliere ekspresje oerienkomme (sjoch regelbere ekspresjes , hjirûnder). Yntervale ekspresjes wiene net tradisjoneel beskikber yn 'e AWK-taal. De POSIX-standert hat se tafoege, om awk en egrep te konsekwinsearjen mei elkoar. Mar har gebrûk is wierskynlik om âlde AWK-programma te brekken, dus gawk lit allinich se as se frege wurde mei dizze opsje, of as wannear't - posysje opjûn is.

-W boarneprogramma -tekst

- boarneprogramma -tekst Brûk programmearst as AWK-programma boarne koade. Dizze opsje makket it maklik yntermixen fan biblioteekfunksjes (brûkt troch de -f en -file- opsjes) mei boarne koade ynfierd op de kommando-rigel. It is bedoeld yn it foarste plak foar middel oant grutte AWK-programma's dy't brûkt wurde yn shell-skripts.

-W ferzje

- ferzje-ferzje ynformaasje foar dit bepaalde kopie fan gawk op 'e standertútfier. Dit is handich foar it witten fan 'e hjoeddeiske kopy fan gawk op jo systeem, op hokker hokker hokker fan' e Free Software Foundation ferwidere is. Dit is ek nuttich by it melden fan bugs. (Per de GNU-koadende standerts bringe dizze opsjes in direkte, suksesfolle útgong.)

- Signal it ein fan opsjes. Dit is handich om mear arguminten te jaan foar it programma AWK sels te begjinnen mei in `` - ''. Dit is benammen foar konsistinsje mei it argumint parsing-konvinsje dat troch de measte oare POSIX-programma's brûkt wurdt.

Yn kompatibiliteit modus wurde alle oare opsjes markearre as ûnjildich, mar wurde oars bewarre. Yn gewoane operaasje, sa lang as programma tekst oanlevere is, wurde ûnbekende opsjes trochjûn oer nei it programma AWK yn it ARGV- array foar it ferwurkjen. Dit is benammen brûkber foar it útfieren fan AWK-programma's fia de útfierbare 'interpreter-meganisaasje' '`##' '.

AWK-PROGRAM-EXECUTION

In AWK-programma bestiet út in ôfdieling fan muster-aksje-ferklearrings en opsjoneel funksje definysjes.

pattern { action statement }

Funksjenamme ( parameter list ) { statements }

Gawk lês earst de programma boarne fan 'e programma-bestannen (of) as jo oantsjutte, fan arguminten nei -soarch , of fan it earste net-opsje-argumint op' e kommandorigel. De -f en -resource- opsjes kinne meardere kearen brûkt wurde op 'e kommandorigel. Gawk lêze it programma-tekst as as alle programma-bestannen s en kommandorigel-boarne teksten mei elkoar ferbûn binne. Dit is handich foar it bouwen fan biblioteken fan AWK-funksjes, sûnder dat se yn elk nije programma AWK oan te meitsjen dy't se brûke. It biedt ek de mooglikheid om biblioteekfunksjes mei command line programma te mingjen.

De omjouwingsfariabele AWKPAT bepaalt in sykpaad om te brûken as it fynjen fan boarne triemmen neamd mei de -f- opsje. As dizze fariabele net bestiet, is it standert paad ".: / Usr / local / share / awk" . (De eigentlike triemtafel kin ôfwike, ôfhinklik fan hoe gawk is boud en ynstalleare.) As in triemnamme oan de -f- opsje jout in `` / '' karakter, wurdt gjin sykopseksje dien.

Gawk útfiert AWK-programma's yn 'e folgjende folchoarder. Eerste wurde alle fariabele assignings oantsjutte oer de -v- opsje. Dêrnei kompilearret gawk it programma yn in ynterne foarm. Dêrnei útfiert de gawk de koade yn 'e BEGIN- blok (s) (as der ien is), en leart dan om elke triem te lêzen yn' e ARGV- array. As der gjin triemmen binne neamd op de kommando-rigel, lês de gawk de standertynfier.

As in filenamme op de kommandorigine hat de foarm var = val wurdt it behannele as in fariabele oanbelanging. De fariabele var wurdt de wearde val oanbean . (Dit bart nei alle BEGIN- blokken (s) binne rinne.) Kommando-line-fariabele assignment is it meast brûkber foar dynamysk werjaan fan wearden oan de fariabelen AWK brûkt om te kontrolearjen hoe't ynput yn gebrûk is yn fjilden en rekken. It is ek nuttich foar it kontrolearjen fan steat as meardere paden nedich binne oer in single data bestân.

As de wearde fan in bepaald elemint fan ARGV leech is ( "" ), skriuwt gawk oer dat.

Foar elke rekord yn 'e ynfier, kinne gawk's toetsen sjen oft it in elemint oerien komt yn it programma AWK. Foar elke patroan dat it record besmacht, wurdt de assosjearre aksje útfierd. De patroanen binne te testen yn 'e oarder dat se yn it programma foarkomme.

Uteinlik, nei allegear de ynfier is útsletten, gawk útfiert de koade yn 'e END- blok (s) (as der ien is).

Feroarings, rekken en fjilden

AWK-fariabelen binne dynamysk; se komme yn bestean as se earst brûkt wurde. Har wearzen binne flakby-puntennûmers of stringen, of beide, ôfhinklik fan hoe't se brûkt wurde. AWK hat ek ien dimensjeel arrays; Arrays mei meardere dimensjes kinne simulearre wurde. Ferskate foarsjennige fariabelen binne ynsteld as in programma-rinnen; Dizze sille beskôge wurde as nedich en hjirûnder gearfiere.

Records

Normaal binne rekken skieden troch tekenrige tekens. Jo kinne kontrolearje hoe't rekken skieden wurde troch it werjaan fan wearden oan de ynboude variable RS . As RS in inkeld karakter is, dat karakter skriuwt skieden. Oars is RS in reguliere ekspresje. Tekst yn 'e ynfier dat oerienkomt mei dizze reguliere ekspresje skiedt de record. Yn kompatibiliteit modus wurdt allinich it earste karakter fan syn stringwearde brûkt om skieden te skieden. As RS ynsteld is op 'e nul-string, dan wurde skieden troch lege rigels skieden. As RS op 'e nul-string ynsteld wurdt, falt it opnij teken altyd as fjildabdieling, neist elke wearde FS kin hawwe.

Fjilden

As elke input-record is lêzen, split gawk de rekord yn fjilden , wêrtroch de wearde fan de FS- fariant as de fjildabdieling is. As FS in inkeld karakter is, wurde fjilden ôfsûnderd troch dit karakter. As FS de nul-string is, dan wurdt elke yndividuele karakter in aparte fjild. Oars wurdt FS ferwachte dat in folslein reguliere ekspresje wêze sil. Yn it spesjale gefal dat FS in ienige romte is, wurde fjilden ûnderskieden troch rûnten fan spaasjes en / of ljeppers en / of nije linen. (Mar sjoch de diskusje fan --posysje , hjirûnder). Tink derom: De wearde fan IGNORECASE (sjoch hjirûnder) beynfloedet hoefolle fjilden opsplitst wurde as FS in reguliere ekspresje is en hoe't daten skieden wurde as RS in reguliere ekspresje is.

As de fariabele FIELDWIDTHS ynsteld is op in romte getalearre list fan nûmers, dan wurdt elk fjild ferwachte dat de fêste breed is en gawk spart de rekord mei de oantsjutte breedte. De wearde fan FS wurdt negearre. It jaan fan in nije wearde nei FS skriuwt it gebrûk fan FIELDWIDTHS , en restore it standert gedrach.

Elk fjild yn 'e ynlaadrapport kin wurde ferwiisd troch syn posysje, $ 1 , $ 2 , ensfh. $ 0 is it folsleine record. Felder moatte net ferwiisd wurde troch konstanten:

n = 5
print $ n

printsje it fyfde fjild yn 'e ynfierrapport.

De fariabele NF wurdt ynsteld oan it totaal oantal fjilden yn 'e ynfierrapport.

Ferwizings nei net-besteand fjilden (dus fjilden nei $ NF ) produkt de nul-string. As jo ​​in net-besteand fjild oantsjutte (bgl. $ (NF + 2) = 5 ) ferheget de wearde fan NF , soarget elke yntervenende fjilden mei de nullde tekens as har wearde, en feroarsake de wearde fan $ 0 om te rekommearjen, mei De fjilden wurde ôfsplitst troch de wearde fan OFS . Ferwizings nei negative nûmere fjilden feroarsaakje in fatale flater. Fergrutting fan NF feroarsake de wearden fan fjilden foarôfgeande de nije wearde te ferliezen, en de wearde fan $ 0 om te rekommearjen, mei de fjilden dy't skieden wurde troch de wearde fan OFS .

In wearde opjaan oan in besteande fjild feroarsaak de hiele record werboud as $ 0 referearre wurdt. Lykwols, it werjaan fan in wearde oant $ 0 feroarsake de record om resale te meitsjen, nije wearden foar de fjilden oan te meitsjen.

Built-in Variables

Gawk 's ynboude variablen binne:

ARGC

It oantal kommando-lienarguminten (bestiet net opsjes foar gawk , of de programma boarne).

ARGIND

De yndeks yn ARGV fan 'e aktive triem wurdt ferwurke.

ARGV

Array fan kommandorigens arguminten. It array is yndeksearre fan 0 nei ARGC - 1. Dynamyske feroaring fan de ynhâld fan ARGV kin de bestannen kontrolearje foar data.

BINMODE

Op net-POSIX-systemen bepaald gebrûk fan `` binêre '' mode foar alle triem I / O. Numerike wearden fan 1, 2, of 3 bepale dat input-triemmen, output-triemmen, of alle triemmen, respektivelik, brûke binêre I / O. Strangwearden fan "r" , of "w" oantsjutte dat respektivelike triemmen of útfierdateken respektivelik binêr brûke moatte binêre I / O. Strangwearden fan "rw" of "wr" oantsjutte dat alle bestannen brûke binêre I / O. Alle oare stringwearden wurde behannele as "rw" , mar generearret in warskôging.

CONVFMT

It konvertearjenformaat foar nûmers, "% .6g" , is standert.

ENVIRON

In array mei de wearden fan 'e aktuele omjouwing. It array wurdt yndeksearre troch de omjouwingsfariabelen, elk elemint is de wearde fan dy fariabele (bygelyks ENVIRON ["HOME"] kin wêze / thús / arnold ). It feroarjen fan dizze array hat gjin ynfloed op de omjouwing sjoen troch programma's dy gawk spawns troch opdracht of de systeem () funksje.

ERRNO

As in systeemfout plakfynt of wurdt in omlieding dien foar getline , by in lêzen foar getline , of by in slot () , dan sil ERRNO in string befetsje dy't de flater beskriuwt. De wearde is foarkomt oan oersetting yn net-Ingelske lokaasjes.

FIELDWIDTHS

In wite-romte skieden list fan fjildbreedte. As jo ​​ynsteld hawwe, parset de ynfier yn fjilden fan fêste breedte, ynstee fan de wearde fan 'e FS- fariabele as de fjildenabdieling.

BESTÂNSNAMME

De namme fan it aktuele ynfier triem. As der gjin triemmen opjûn binne op 'e kommandorigel, is de wearde fan FILENAME ' `- ''. FILENAME is lykwols net definiearre yn 'e BEGIN- blok ( asp . Net mei getline set ).

FNR

It ynfierdatabel nûmer yn it aktive ynfier triem.

FS

De ynfierfjildfjilden, in romte fan standert. Sjoch Felder , boppe.

IGNORECASE

Kontrolearret de saak-sensitiviteit fan alle reguliere ekspresje en string-operaasjes. As IGNORECASE in net-nul-wearde hat, dan sjogge fergelegenheden en patroanen oerienkomst yn regels, fjilden te splitsen mei FS , rekken skieden mei RS , reguliere ekspresje dy't oerienkomme mei ~ and ! ~ , En de gensub () , gsub () , yndeks () , match () , splits () , en sub () ynboude funksjes alle ignorante gefal as jo reguliere ekspresjes operearje. NOTE: Array-subscriptearing is net beynfloede, noch is de asort () -funksje.

As de IGNORECASE lykwols net is as nul, / aB / oerienkomt alle strings "ab" , "aB" , "Ab" , en "AB" . Krekt as by alle AWK-fariabelen is de earste wearde fan IGNORECASE nul, sadat alle reguliere ekspresje en string-operaasjes normaal saak-sensitive binne. Under Unix wurdt de folweardige ISO 8859-1 tekenrige foar Latyn-1 brûkt as it oardieljen fan saak.

LINT

Biedt dynamyske kontrôle oer de --lint- opsje út binnen in AWK-programma. Wannear 't wier, printsje warskôgings. As miskien is it net. Wannear't de stringwearde "fatal" is , lette warskôgings fatale fouten, lykas --lint = fatal . Elk oare echte wearde printsje warskôgings.

NF

It oantal fjilden yn 'e aktuele ynfierrekord.

NR

It totale oantal yntaksjes sjogge oant no ta.

OFMT

It outputformaat foar nûmers, "% .6g" , is standert.

OFS

De útfaltfjild-skieding, in romte fan standert.

ORS

De útfierdatabesektor, standert in nijline.

PROCINFO

De eleminten fan dizze array jouwe tagong ta ynformaasje oer it programma AWK. Op guon systemen kin der eleminten yn it array wêze, "group1" troch "groep n " foar guon n , wat is it oantal oanfollende groepen dy't it proses hat. Brûk de yn 'e auteur te testjen foar dizze eleminten. De folgjende eleminten binne garandearre om beskikber te wêzen:

PROCINFO ["sjoch"]

de wearde fan 'e getegid (2) systeemoanfolling.

PROCINFO ["euid"]

de wearde fan 'e geteuïd (2) systeemoanfolling.

PROCINFO ["FS"]

"FS" as fjild spaltet mei FS is yn wurking, of "FIELDWIDTHS" as fjild splitset mei FIELDWIDTHS yn wurking.

PROCINFO ["gid"]

de wearde fan 'e getgid (2) systeemoanfolling.

PROCINFO ["pgrpid"]

de prosesgroep ID fan it aktuele proses.

PROCINFO ["pid"]

de proses-ID fan it aktuele proses.

PROCINFO ["ppid"]

de âlderproses ID fan it aktuele proses.

PROCINFO ["uid"]

de wearde fan 'e getuid (2) systeemoanfolling.

RS

De ynlaegrapportabdieling, standert in nije line.

RT

De rekordabonnator. Gawk pleatst RT nei de ynputte tekst dat oerienkomt mei de karakter of reguliere ekspresje oantsjutte troch RS .

RSTART

De yndeks fan it earste karakter dat oerienkomt mei match () ; 0 as gjin wedstriid. (Dit betsjut dat karakterindices begjinne op ien.)

RLENGTH

De lingte fan de teken dy't oerienkomt mei match () ; -1 as gjin wedstriid.

SUBSEP

It karakter dat brûkt wurdt om meardere ûnderdielen yn samle-eleminten te skieden, standert "\ 034" .

TEXTDOMAIN

It tekstdomein fan it programma AWK; brûkt om de lokale oersettings te finen foar de programma's strings.

Arrays

Arrays binne subsydzje mei in ekspresje tusken fjouwerkant klanken ( [ en ] ). As de ekspresje in ekspresje-list is ( expr , expr ...) dan is it array-subseks in string, besteande út de ferkeatsing fan de (string) wearde fan elke ekspresje, skieden troch de wearde fan de SUBSEP- fariabele. Dizze ynstallaasje wurdt brûkt om multiplisy dimensionearre arrays te simulearjen. Bygelyks:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "hallo, wrâld \ n"

de sesje "hallo, wrâld \ n" oan it elemint fan 'e array x dy't troch de string "A \ 034B \ 034C" yndeksearre wurdt. Alle arrays yn AWK binne assosjatyf, dus yndeksearre troch tekenwearden.

De spesjale opdrachtjouwer kin brûkt wurde yn in as of bytiden útjefte om te sjen oft in array in yndeks bestiet út in bepaalde wearde.

as (val in array) druk array [val]

As de array meardere abonneminten hat, brûke (i, j) yn array .

De yn konstruksjes kinne ek brûkt wurde yn in foar loop om te slaan oer alle eleminten fan in array.

In elemint kin wis fan in array fuortsmiten wurde mei de delete- statement. De wiskeferbettering kin ek brûkt wurde om de folsleine ynhâld fan in array te wiskjen, gewoan troch it bepalen fan de arraynamme sûnder in tekenrige.

Variable Typing And Conversion

Variablen en fjilden kinne wêze (flakke punt) getallen, of stringen, of beide. Hoe't de wearde fan in fariabele wurde ynterpretearre hinget ôf fan syn ferbân. As brûkt wurdt yn in numerike ekspresje, sil it behannele wurde as nûmer, as brûkt wurdt as in string dat as in string behannele wurdt.

Om in fariant te ferwêzentlikjen as in getal behannele wurde, add 0 oan it; om it te tekenjen as in string te behanneljen, te ferkeapjen mei de nulle string.

As in tekenrige konvertearret nei in nûmer, dan wurdt de konverzje dien mei help fan strtod (3). In getal wurdt konvertearre yn in tekenrige troch de wearde fan CONVFMT as formaat string te brûken foar sprintf (3), mei de numerike wearde fan de fariabele as it argumint. Hoewol al alle nûmers yn AWK flotearjend binne, binne yntegraal wearden altyd omset as integrers. Sa wurde jûn

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

De fariabele b hat in stringwearde fan "12" en net "12.00" .

Gawk performs fergelykingen as folgjend: As twa fariabelen binne numericus, wurde se numerich fergelike. As ien wearde is numericus en de oare hat in tekenrige wearde dy't in 'numeric string' is, dan wurde fergelykjen ek numeryen. Oarspronklik wurdt de nûmerike wearde omsetten nei in string en in stringferliking wurdt útfierd. Twa stringen wurde fergelike, fansels, as stringen. Tink derom dat de standert POSIX it konsept fan `` numerike string '' oeral brûkt, sels om string-konstanten. Dit is lykwols dúdlik ferkeard, en gawk docht dit net. (Lokkich is dizze fêststeld yn de folgjende ferzje fan de standert.)

Tink derom dat stringkonstanten, lykas "57" , binne net numerike snaren, se binne stringkonstanten. It idee fan `` numerike string '' jildt allinich foar fjilden, getline ynfier, FILENAME , ARGV- eleminten, ENVIRON- eleminten en de eleminten fan in array dy't troch split () neamd binne dat numerike tekenrige binne. It basis idee is dat brûkersynfier , en allinich brûkersynfier, dy't numerike sjogge, soene behannele wurde moatte.

Uninitialisearre fariabelen hawwe de numerike wearde 0 en de stringwearde "" (de nul, of lege, string).

Oktal en hexadezimal konstanten

Begjin mei ferzje 3.1 fan gawk kinne jo gebrûk meitsje fan c-styl octale en hexadezimal konstanten yn jo AWK-programma boarne koade. Bygelyks, de oktalwearde 011 is lyk oan desimaal 9 , en de hexadezimal wearde 0x11 is lykwols lykas desimaal 17.

String konstanten

String-konstanten yn AWK binne sequinsjes fan tekens dy't tusken dûbele quotes ( " ) wurde bepaald. " Ynstrings binne bepaalde fluchtoetsen erkend, lykas yn C. Dit binne:

\\

In literêre backslash.

\in

It `` alert '' karakter; meastentiids it karakter ASCII BEL.

\ b

eftergrûn.

\ f

form-feed.

\ n

nije rigel.

\ r

ferfier werom.

\ t

horizontale ljepper.

\ v

vertical tab.

\ x hex sifers

It karakter fertsjintwurdige troch de teken fan hexadezimale sifers nei de \ x . As yn ANSIC binne alle neikommende hexadezimale sifers beskôge as in part fan 'e ûntbrekkende folchoarder. (Dizze funksje moat ús wat oer sprekwurden troch komitee fertelle.) Foarbyld , "\ x1B" is it ASCIIESC (fluch) karakter.

\ ddd

It karakter fertsjintwurdige troch de 1-, 2-, of 3-stellige seker fan octal sifers. As "\ 033" is it ASCII ESC (fluch) karakter.

\ c

It literêre karakter c .

De escape-sequences kinne ek brûkt wurde yn konstante reguliere útdrukkingen (bgl. / [\ T \ f \ n \ r \ v] / oerienkommende letters-tekens).

Yn kompatibiliteit modus wurde de karakters fertsjintwurdige troch octal- en hexadezimale fluchtoetsen wurde letterlik behannele as se brûkt wurde yn reguliere ekspresje konstanten. Sa is / a \ 52b / is lykwichtlik as / a \ * b / .

Patterns and Actions

AWK is in streekrjochte taal. It patroan komt earst, en dan de aksje. Aktuele ferklearrings binne bewarre yn { en } . Sawol it patroan kin ûntbrekke, of de aksje kin ûntbrekke, mar fansels net beide. As it patroan ûntbrekt, wurdt de aksje útfierd foar elke singlewerjefte fan ynput. In fereaske aksje is lykweardich

{print}

dy't de folsleine opname printsje.

Begjinsels begjinne mei it `` # '' karakter, en trochgean oant it ein fan 'e rigel. Blanklinen kinne brûkt wurde foar ôfsûnderlike ferklearrings. Normaal is in ferklearring ôfsluten mei in nije line, mar dit is net it gefal foar lineen dy't einigje yn in ``, '', { , ? , : , && , of || . Linen dy't einigje, of oars hawwe ek har útspraken automatysk trochgean op 'e neikommende line. Yn oare gefallen kin in line net trochgean wurde troch it ein te meitsjen mei in ', yn hokker gefal wurdt de nije line ignorearre.

Mearfâldich ferklearrings kinne op ien line lizze troch se te ferparren mei in ``; ''. Dit jildt foar sawol de útspraken binnen it aksje diel fan in patint-aksjepaar (it gewoane gefal), en oan 'e ôfbyldingsaksje sels.

Patterns

AWK-patroanen kinne ien fan 'e folgjende wêze:

BEGIN END / reguliere ekspresje / relaasje ekspresje pattern && pattern pattern || pattern pattern ? pattern : pattern ( pattern ) ! pattern pattern1 , pattern2

BEGIN en END binne twa spesjale soarten fan patroanen dy't net hifke wurde tsjin de ynput. De aksjepartijen fan alle BEGIN- patroanen fusearje as as alle ferklearrings skreaun binne yn in ien BEGIN- blok. Se wurde útfierd foardat ien fan 'e ynput wurde lêzen. Hjirmei wurde alle END- blokken gearfoege, en útfierd as alle inputs útsletten binne (of as in útfieringsoanfetting útfierd wurdt). BEGIN en END- patroanen kinne net kombinearre wurde mei oare patroanen yn patroanen. BEGIN en END- patroanen kinne akte-parten ûntbrekke.

Foar / regelmjittich ekspresje / patroanen wurdt de assosjearre deklaraasje foar elke input-record rekkene dy't oerienkomt mei de reguliere ekspresje. Regelmjittige útdrukkingen binne itselde as dy yn egrep (1), en binne hjirûnder gearfette.

In relaasje-ekspresje kin ien fan 'e operators brûke dy't hjirûnder beskreaun wurde yn' e seksje oer hannelingen. Dizze algemiene toetsjen as bepaalde fjilden passend gewoane reguliere útdrukken.

De && , || , en ! Operaters binne logikaal, logysk of OR, en logyske NOT, respektivelik, lykas yn C. Se docht koarte-circuit-evaluaasje, ek as yn C, en wurde brûkt foar it kombinearjen fan mear primitive middels útdrukkingen. As yn 'e measte talen kinne klamkes brûkt wurde om de bestelling fan' e evaluaasje te feroarjen.

De?: Operator is lykas deselde operator yn C. As it earste patroan is wier is it patroan foar testen is it twadde patroan, oars is it de tredde. Allinnich ien fan 'e twadde en tredde patroanen wurdt evaluearre.

De patroan1 , pattern2 foarm fan in ekspresje wurdt in rigepatroal neamd. It oerienkommend alle ynfierdateken begjint mei in record dat oerienkomst mei pattern1 , en trochgean oant in record dat oerienkomt mei pattern2 , ynklusyf. It kombinearret net mei in oare soarte ekspresje.

Regular Expressions

Regelmjittige útdrukkingen binne de útwreide soarte fûn yn egrep . Se wurde komponearre as persoanen:

c

komt oerien mei de non-metacharakter c .

\ c

komt oerien mei it literêre karakter c .

.

befettet elke karakter wêrûnder nijeline.

^

komt oerien mei it begjin fan in string.

$

komt oerien mei it ein fan in string.

[ abc ... ]

karakterlist, oerienkommt ien fan 'e tekens abc ....

[^ abc ... ]

negatearre karlistlist, oerienkommende karakter, útsein abc ....

r1 | r2

alternaasje: wedstriden o r1 of r2 .

r1r2

ferkeatsing: wedstriden r1 , en dan r2 .

r +

mei ien of mear r 's.

r *

matches nul of mear r 's.

r ?

matches nul of ien r 's.

( r )

groepearing: wedstriden r .

r { n }

r { n ,}

r { n , m } Ien of twa nûmers yn hollen betsjutte in yntervale ekspresje . As der ien nûmer yn 'e paden is, wurdt de foarôfgeande reguliere ekspresje r n kear werhelle. As der twa sifers binne, skieden troch in komma, wurdt r in n- m kear werhelle. As der in nûmer folge troch in komma, dan wurdt r op syn minst n kear werhelle.

Ynterval ekspresjes binne allinich beskikber as der elk --posysje of --re-ynterval op 'e kommandorigel oanjûn is.

\ y

komt oerien mei de lege string op it begjin of it ein fan in wurd.

\ B

komt oerien mei de lege string yn in wurd.

\ <

komt oerien mei de lege string oan it begjin fan in wurd.

\>

komt oerien mei de lege string oan 'e ein fan in wurd.

\ w

komt oerien mei elk wurd-ynsteld teken (letter, stifter, ofûnder).

\ W

befettet elke letter dat gjin wurd-bestân is.

\ `

komt oerien mei de lege string oan it begjin fan in puffer (tekenrige).

\ '

komt oerien mei de lege string oan 'e ein fan in puffer.

De ûntslaggen-sequins dy't jildich binne yn string-konstanten (sjoch hjirûnder) binne jildich yn reguliere útdrukkingen.

Karakterklassen binne in nije funksje ynfierd yn 'e POSIX-standert. In karakterklasse is in spesjale notaasje foar it beskriuwen fan listen fan karakters dy't in spesifyk attribje hawwe, mar wêr't de eigentlike karakters sels ferskille kinne fan lannen nei lân en / of fan karakter set wurde oan karakter set. Bygelyks is it begryp fan wat in alfabetysk karakter is yn 'e Feriene Steaten en yn Frankryk.

In karakterklasse is allinich jildich yn in reguliere ekspresje yn ' e klokken fan in karakterlist. Karakterklassen besteane út [: , in kaaiwurd foar de klasse, en :] . De karakterklassen dy 't defineare binne troch de POSIX-standert, binne:

[: alnum:]

Alphanumeryske tekens.

[: alpha:]

Alfabetyske tekens.

[:leech:]

Space or tabs characters.

[: cntrl:]

Kontrolearders.

[: berjocht:]

Numerike karakteren.

[:grafyk:]

Characters dy't beide printber binne en sichtber binne. (In romte is printber, mar net sichtber, wylst in a sawol is.)

[:leger:]

Lower-case alfabetyske karakters.

[:ôfdrukke:]

Printerbarbere karakters (karakters dy 't gjin kontrôles tekenje.)

[: punct:]

Punktoeringspersoanen (tekens dy't net letter, sifers, kontrolepersekjes, of romtepersoanen) binne.

[:rûmte:]

Space characters (lykas romte, ljepblêd en formfeed, om in pear te neamen).

[:heger:]

Upper-case alfabetyske karakters.

[: xdigit:]

Characters dy't hexadezimale sifers binne.

Foarbyld fan 'e POSIX-standert, om alphanumeryske tekens te passen, moatte jo skriuwe / [A-Za-z0-9] / . As jo ​​karakter sette hie oare alfabetyske tekens yn it, dan soe dit net oerien komme, en as jo karakter set net oars as ASCII skiede, dan kin dit net mei de ASCII-alphanumeryske tekens passe. Mei de POSIX-karakterklassen kinne jo skriuwe / [[: alnum:]] / , en dit komt oerien mei de alfabetyske en numerike tekens yn jo karakter.

Twa oanfoljende spesjale sequins kinne ferskine yn karakterlisten. Dizze sille tapast wurde foar net-ASCII-tekensetsjes, dy't ienige symboalen (ek wol kombinaasje-eleminten ) hawwe kinne hawwe dat meardere as ien karakter fertsjintwurdige binne, en ek inkele karakters dy't lykweardich binne foar it oanbieden , sortearjen, doelen. (Bygelyks yn it Frânsk, in gewoane 'e' 'en in grave-aksintearre e' binne lykweardich.)

Collating Symbols

In kolumbringsymboal is in meardere karakter eleminten yn 'e [[. en .] . Bygelyks, as ch in elkoar elemint is, is [[.ch.]] In reguliere ekspresje dy't oerienkommend elemint komt, wylst [ch] in reguliere ekspresje is dat oerienkomt mei c of h .

Equivalence Classes

In equivalence-klasse is in locale-spesifisearre namme foar in list mei tekens dy't lykweardich binne. De namme stiet yn [= en =] . De nammen kinne lykwols brûkt wurde om alle "e", "e", "" en "` e "te fertsjinjen. Yn dit gefal is [[= = = =] in reguliere ekspresje dat befettet elk fan e , e ' , of e` .

Dizze funksjes binne tige weardefolle yn net-Ingelske sprekkers. De biblioteek funksjonearret dat gawk brûkt foar reguliere ekspresje dy't oerienkomme op it stuit allinich POSIX-karakterklassen erkennen; Se erkende kolemblingssymboalen of lykweardichheidsklassen.

De \ y , \ B , \ < , \> , \ w , \ W , \ ` , en \ operators binne spesifyk foar gawk ; Se binne ekstânsjes basearre op foarsjennings yn 'e reguliere ekspresje-biblioteken fan GNU.

De ferskate kommando-rigelopsjes kontrolearje hoe gawk ynteressearre karakters yn reguliere útdrukken.

Gjin opsjes

Yn it standert-gefal jouwe gawk alle ynstellingen fan POSIX reguliere útdrukken en de GNU reguliere ekspresje-operators dy't hjirboppe beskreaun binne. Alle yntervalens wurde lykwols net stipe.

--posysje

Allinnich POSIX reguliere útdrukkingen wurde stipe, de GNU-operators binne net spesjale. (Bgl, \ w komt oerien mei in letterk w ). Ynterval ekspresjes binne tastien.

--tradisjoneel

Tradisjoneel Unix geweldige útdrukkings binne oanpast. De GNU-operators binne net spesjale, yntervalwurden binne net beskikber, en binne de POSIX-karakterklassen ( [[: alnum:]] en sa). Characters beskreaun troch octal en hexadezimales escape sequences wurde letterlik behannele, sels as se reguliere ekspresje metacharacters fertsjintwurdigje.

-re-interval

Meitsje yntervalens yn reguliere útdrukken, sels as --tradioasje oanwêzich is.

Actions

Aktuele ferklearrings wurde yn 'e pylken, { en } ynskeakele. Aktive ferklearrings bestean út 'e gewoane oanbelangjende, oanbiede en looping-ferklearrings fûn yn de measte talen. De operators, kontrôlearekeningen, en ynput / útstel-útjeften binne opsteld nei de yn C.

Operators

De operators yn AWK, yn opdracht fan ôfwiking fan prioriteit, binne

( ... )

Groepearjen

$

Field reference.

++ -

Increment and decrement, both prefix and postfix.

^

Eksponintaasje ( ** kin ek brûkt wurde, en ** = foar de opdrachtbehearder).

+ -!

Unary plus, unary minus, en logyske negaasje.

* /%

Multiplikaasje, divyzje, en modulus.

+ -

Tafoeging en subtraksje.

rûmte

String ferkeatsing.

<>

<=> =

! = == De reguliere relaasjeoperators.

~! ~

Regelmjittige ekspresje-oerienkomst, negearre wedstriid. NOTE: Bliuw gjin regelmjittige ekspresje ( / foo / ) op 'e lofter side fan in ~ of ! ~ . Allinne ien op 'e rjochterkant brûke. De ekspresje / foo / ~ exp hat deselde betsjutting as (($ 0 ~ / foo /) ~ exp ) . Dit is normaal net wat bedoeld wie.

yn

Array membership.

&&

Logysk EN.

||

Logyske OR.

?:

De C bedoelde útdrukking. Dit hat de foarm ekspr1 ? expr2 : expr3 . As expr1 wier is, is de wearde fan 'e ekspresje ekspr2 , oars is it expr3 . Allinnich ien fan ekspr2 en ekspr3 wurdt evaluearre.

= + = - =

* = / =% = ^ = Belesting. Sawol absolute assignment ( var = wearde ) en operateur-opjefte (de oare foarmen) wurde stipe.

Control Statements

De kontrôle-ferklearrings binne sa:

as ( betingsten ) ferklearring (lykwols deklaraasje ) as ( betingsten ) ferklearring do statement ( status ) foar statement ( expr1 ; expr3 ; expr3 ) foar ( var in array ) deklaraasje brek fuortsmite wiskje array [ index ] delete array exit [ expression ] statements }

I / O Statements

De ynfier- / útfier-ferklearrings binne sa:

slute ( triem [ , hoe ] )

Sleep triem, pûde of co-process. De opsjoneel hoe moat allinich brûkt wurde by it sluten fan ien ein fan in twa-paad pylk nei in co-process. It moat in tekenwearde wêze, "oan" of "út" .

getline

Set $ 0 fan folgjende ynfierbehearder; set NF , NR , FNR .

getline < bestân

Set $ 0 fan folgjende rekord fan triem ; set NF .

getline var

Set var fan 'e neikommende ynfierbehearder; set NR , FNR .

getline var < file

Set var fan de neikommende list fan triem .

kommando | getline [ var ]

Run command piping de útfier yn of $ 0 of var , lykas boppesteande.

kommando | & getline [ var ]

Laad kommando as in co-process piping de útfier yn of $ 0 of var , lykas boppesteande. Co-prosessen binne in gawk- útwreiding.

folgjende

Stopje it aktive ynfierdatabank. De folgjende ynfierrekord wurdt lêzen en ferwurkjen begjint mei it earste patroan yn it programma AWK. As it ein fan 'e ynputgegevens berikt is, wurdt de END- blok (as), as der, útfierd wurde.

nextfile

Stopje de aktuele ynfier triem. De folgjende ynfierlist lêzen komt út it folgjende ynfier bestân. FILENAME en ARGIND wurde aktualisearre, FNR is reset oan 1, en ferwurking begjint mei it earste patroan yn it programma AWK. As it ein fan 'e ynputgegevens berikt is, wurdt de END- blok (as), as der, útfierd wurde.

ôfdrukke

Printsje it aktuele record. De útfierlist wurdt beëinige mei de wearde fan de ORS- fariabele.

print expr-list

Prints ekspresjes. Elke ekspresje wurdt skieden troch de wearde fan de OFS- fariabele. De útfierlist wurdt beëinige mei de wearde fan de ORS- fariabele.

print expr-list > bestân

Prints útdrukken op triem . Elke ekspresje wurdt skieden troch de wearde fan de OFS- fariabele. De útfierlist wurdt beëinige mei de wearde fan de ORS- fariabele.

printf fmt, ekspr-list

Format en printje.

printf fmt, ekspr-list > bestân

Formaat en druk op triem .

systeem ( cmd-line )

Laad de kommando cmd-line , en de exitstatus werom. (Dit kin net beskikber wêze op net-POSIX-systemen.)

fflush ( [ file ] )

Flush any puffers associated with the open output file or pipe file . As de triem fermind is, dan wurdt de standertútfier fljocht. As triem de nul-string is, dan hawwe alle iepenje triemmen en pipes har puffer fluch.

Oanfoljende útfieringsferwizings binne tastien foar print en printf .

print ... >> bestân

jout de útfier nei it bestân .

print ... | befel

skriuwt op in pûde.

printje ... | & kommando

ferstjoert gegevens nei in gearwurking.

It kommando- getline jout 0 op 'e ein fan triem en -1 op in flater. Op in flater befettet ERRNO in string dy't it probleem beskriuwt.

Tink derom: As jo ​​in pip of co-process ferwurkje nei getline , of printje of printf binnen in loop, moatte jo ticht () brûke om nije eksemplaren fan it kommando te meitsjen. AWK docht net automatysk pipes of co-prosessen te sluten, as se EOF weromkomme.

De printf Statement

De AWK-ferzjes fan 'e printf- oanfetting en sprintf () -funksje (sjoch hjirûnder) akseptearje de neikommende konfiguraasje-spesifike formaten:

% c

In ASCII-karakter. As it argumint brûkt foar % c is numeryk, wurdt it behannele as karakter en printe. Oarspronklik wurdt it argumint as in string oanwêzich, en it iennichste earste karakter fan dizze string is bedreaun.

% d , % i

In desimaal nûmer (it hiele diel).

% e,% E

In floeiend puntnûmer fan 'e foarm [-] d.dddddde [+ -] dd . It % E- formaat brûkt E ynstee fan e .

% f

In floeiend puntnûmer fan 'e foarm [-] ddd.dddddd .

% g,% G

Brûk % e of % f- konverzje, wêrtroch koarter is, mei nulenske nullen ûnderdrukt. It % G- formaat brûkt % E ynstee fan % e .

% o

In net-octraal nûmerûmer (ek in integer).

% u In netkommende desimaal getal (wer, in inkel).

% s

In karakterstring.

% x,% X

In net-tekene hexadezimalaal (in inkel). It % X- formaat brûkt ABCDEF yn plak fan abcdef .

%%

In single % teken; gjin argumint is omset.

Opsjoneel sille ekstra parameter lizze tusken it % en de kontrôlebrief:

count $

Brûk dit tal arguminten op dit punt yn de formatting. Dit wurdt in posysje beskôge neamd en wurdt primêr brûkt foar gebrûk yn oersetten ferzjes fan formatfoarm, net yn 't orizjinele tekst fan in AWK-programma. It is in gawk- útwreiding.

-

De ekspresje moat op it fjild litte - rjochtfeardich wêze.

rûmte

Foar numerike konversieren, prefix positive wearden mei in romte, en negative wearden mei in minus teken.

+

It plus-teken, brûkt foar de breedte modifikaasje (sjoch hjirûnder), seit dat altyd in teken leveret foar numeryske konversaasjes, ek as de gegevens te foarmjen binne posityf. De + oerskriuwt de romtefarder.

#

Brûk in `` alternate formulier '' foar bepaalde kontrôlebrieven. Foar % o , leverje in liedende nul. Foar % x , en % X , leverje in liedende 0x of 0X foar in nonzero-resultaat. Foar % e , % E , en % f , it resultaat altyd befettet in desimaal puntsje. Foar % g , en % G , trailing nullen binne net fanút it resultaat fuortsmiten.

0

In liedende 0 (nul) falt as flagge, dat oanjout dat output moat wurde mei nullen ynstee fan spaasjes. Dit jildt ek foar net-numerike útfierformaten. Dizze flagge hat allinich effekt as de fjildbreedte breed is as de wearde dy't gedrukt wurdt.

breedte

It fjild moat op dizze breed fersetten wurde. It fjild wurdt normaal mei spaasjes opboud. As de 0 flagge brûkt is, wurdt it mei nullen fersmiten.

. pre

In nûmer dat de feiligens oanpasse by it printsjen. Foar de % e , % E , en % f- formaten, jout dit it oantal sifers dy't jo printje wolle oan 'e rjochterkant fan' e desimaal puntsje. Foar de % g , en % G- formaten, jout it maksimum oantal signifikante sifers. Foar de % d , % o , % i , % u , % x , en % X- formaten, jout it minimum it oantal sifers om te printsjen. Foar % s befettet it maksimum oantal karakters fan 'e snaar dy't printe wurde moat.

De dynamyske breedte en prestiidsfunksjes fan de ANSI C printf () routines wurde stipe. A * yn plak fan sawol de breedte of foarôfsprachen spesjale dat har wearden fan 'e argumintenlist ôfdrukt wurde nei printf of sprintf () . Om in posysje-specifier te brûken mei in dynamyske breedte of prestiizje, leverje de count $ nei de * yn de formaat string. Bygelyks "% 3 $ * 2 $. * 1 $ s" .

Special File Names

Wannear't I / O opdrachten fan print of printf yn in bestân, of fia getline fan in bestân, erkennt gawk bepaalde spesjale triemnammen yntern. Dizze filenames sille tagong krije ta iepen dokuminteskriptors dy't geane fan gawk 's âlderproses (meastal de shell). Dizze triemnammen kinne ek brûkt wurde op de kommandorigine om gegevensbestanden te neamen. De filenames binne:

/ dev / stdin

De standertynfier.

/ dev / stdout

De standertútfier.

/ dev / stderr

De standert foutútfier.

/ dev / fd / n

De triem dy't ferbûn is mei de iepen triem descriptor n .

Dizze binne benammen brûkber foar flater berjochten. Bygelyks:

print "Jo bliezen!" > "/ dev / stderr"

wylst jo oars brûke moatte

print "Jo bliezen!" | "kat 1> & 2"

De neikommende spesjale filennames kinne brûkt wurde mei de | & co-process operator foar it meitsjen fan TCP / IP netwurkferbiningen.

/ inet / tcp / lport / rhost / rport

Triem foar TCP / IP- ferbining op lokaal poarte lort nei remote host rhost op remote poarte rport . Brûk in poarte fan 0 om it systeem in poarte te selektearjen.

/ inet / udp / lport / rhost / rport

Similar, but use UDP / IP instead of TCP / IP.

/ inet / raw / lport / rhost / rport

Reservearre foar takomst brûken.

Oare spesjale filennames jouwe tagong ta ynformaasje oer it rinnende gawk- proses. Dizze filenames binne no ferâldere. Brûk de PROCINFO- array om de ynformaasje te krijen dy't se leverje. De filenames binne:

/ dev / pid

It lêzen fan dizze triem jout de prozess-ID fan it aktive proses werom, yn desimaal, beëinige mei in nijline.

/ dev / ppid

It lêzen fan dizze triem jout de parentbehear ID fan it aktive proses werom, yn desimaal, beëinige mei in nijline.

/ dev / pgrpid

It lêzen fan dit bestân jout de prozessgroep-ID fan it aktuele proses werom, yn desimaalen, ôfsluten mei in nijline.

/ dev / user

It lêzen fan dizze triem jout in inkeld rekôr mei in nijline. De fjilden wurde ôfsletten mei spaasjes. $ 1 is de wearde fan 'e getuid (2) systeemferliening, $ 2 is de wearde fan' e getal (2) systeemferliening, $ 3 is de wearde fan 'e getgid (2) systeemferliening, en $ 4 is de wearde fan' e getegid (2) systeem oanrop. As der in ekstra fjilden binne, dan binne se de groep-IDs weromjûn troch getgroups (2). Meardere groepen kinne net op alle systemen stipe wurde.

Numerike funksjes

AWK hat de folgjende ynboude aritmetike funksjes:

atan2 ( y , x )

Jout de arctangente fan y / x werom yn radialen.

cos ( ekspr )

Gout de kosina fan ekspr werom , dy't yn radies is.

exp ( ekspr )

De eksponinsjele funksje.

int ( ekspr )

Trunkenje oant ynteger.

log ( ekspr )

De natuerlike logaritmefunksje.

rand ()

Jou in random nûmer tusken 0 en 1 werom.

sin ( ekspr )

Giet de sin fan ekspr werom , dy't yn radies is.

sqrt ( expr )

De fjildfunksje.

srand ( [ ekspr ] )

Gebrûken ekspr as in nije sied foar de random nûmer generator. As der gjin ekspres is, wurdt de tiid fan 'e dei brûkt. De weromkommende wearde is de foarige sied foar de random nûmer generator.

Stringfunksjes

Gawk hat de folgjende ynstringsfunksjes :

asort ( s [ , d ] )

Jout it oantal eleminten yn it boarne array werom. De ynhâld fan s wurde sortearre mei help fan normale regels fan gawk foar it fergelykjen fan wearden, en de yndeks fan de sortearre wearden fan s binne ferfongen troch sequinsjele intekeners dy't begjinne mei 1. As it opsjoneel domein array d oantsjutte is, wurdt earst doppele nei d , en dan wurdt dardearre, wêrtroch't de yndeks fan 'e boarne array' s ûnmang wurde.

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

Sykje de doelstreek t foar wedstriden fan 'e reguliere ekspresje r . As h is in string begjin mei g of G , ferfange jo alle wedstriden fan r mei s . Oars, h is in nûmer wat oanjout wêrfoar oerienkomst fan r te ferfangen. As t net levere wurdt, wurdt $ 0 brûkt. Binnen de ferfangende tekst s kin de sesje \ n , dêr't n in sifer fan 1 oant 9 is, kin brûkt wurde om allinich de tekst op te jaan dy't de nûmerde subsydzjet opnij hat. De sesje \ 0 fertsjintwurdiget de folsleine oanpaste tekst, lykas it karakter & . Oars as sub () en gsub () wurdt de feroare string weromjûn as resultaat fan 'e funksje, en de oarspronklike doelstreak is net feroare.

gsub ( r , s [ , t ] )

Foar elke substring dy't oerienkomt mei de reguliere ekspresje r yn de string t , ferfange de snaar, en it oantal substitúsjes weromjaan. As t net levert, brûke $ 0 . In & yn de ferfangende tekst is ferfongen troch de tekst dat eigentlik oanpast wie. Brûk \ & om in literaal te krijen. (Dit moat socht wurde as "\\ &" ; sjoch GAWK: Effektive AWK-programmearring foar in folsleine diskusje oer de regels foar & '& backslashes yn' e ferfangende tekst fan sub () , gsub () , en gensub () .)

Yndeks ( s , t )

Giet de yndeks fan 'e tekenr yn' e tekenr, of 0 as t net oanwêzich is. (Dit betsjut dat karakterindices begjinne op ien.)

lingte ( [ s ] )

Gout de lingte fan de tekenr werom , of de lingte fan $ 0 as s net oanbean wurdt.

wedstriid ( s , r [ , a ] )

Jout de posysje werom yn s dêr't de reguliere ekspres r r komt, of 0 as r net is, en set de wearden fan RSTART en RLENGTH . Tink derom dat de argumintoarder itselde is as foar de ~ operator: str ~ re . As in array is wurdt wurdt in lêzen en dan eleminten 1 oant n binne fol mei de dielen fan s dy't oerienkomme mei de oerienkommende subsydzjebewurking yn r . It 0e-elemint fan in befettet it diel fan s oerien mei de folsleine reguliere ekspresje r .

Split ( s , a [ , r ] )

Splits de snaar yn 'e array a op de reguliere ekspresje r , en jout it oantal fjilden werom. As r wegere wurdt, wurdt FS ynstee brûkt. De array a wurdt earst lêzen. Spultsje behannelje identysk nei fjildspalting, hjirboppe beskreaun.

sprintf ( fmt , ekspr-list )

Prints ekspr-list neffens fmt , en jout de opjûne string werom.

strtonum ( str )

Examines str , en jout syn nûmerike wearde werom. As str begjint mei in liedingende 0 , strtonum () ferwachtet dat str in octaal getal is. As str begjint mei in liedende 0x of 0X , strtonum () ferwachtet dat str in hexadezimalaal is.

sub ( r , s [ , t ] )

Krekt lykas gsub () , mar allinich de earste oerienkommende substring is ferfongen.

substr ( s , i [ , n ] )

Jout de meast n- karakter fan substring fan s begjin by i . As n weg is, wurdt de rest fan s brûkt.

tolower ( str )

Jout in kopy fan 'e string str werom , mei alle haadletters yn str strutsen nei har oerienkommende lytsere aspekten. Net-alfabetyske karakters binne net feroare.

toupper ( str )

Jout in kopy fan 'e string str werom , mei alle lower-case-tekens yn str wurde oerbrocht nei har oerienkommende top-opsjers. Net-alfabetyske karakters binne net feroare.

Tiidfunksjes

Om't ien fan 'e primêre gebrûk fan' e AWK-programma 's ferwurkjen fan logtriemmen die tiidstemming befetsje, jout gawk de folgjende funksjes foar it krijen fan tiidstempen en formaat.

mktime ( datespec )

Rurns datepec yn in tiidstempel fan deselde foarm as weromjûn troch systime () . De datum is in string fan 'e foarm YYYY MM DD HH MM SS [DST] . De ynhâld fan 'e snaar is sechs of sân nûmers dy't respektivelik it folsleine jier fertsjinje ynklusyf ieuwen, de moanne fan 1 oant en mei 12, de dei fan' e moanne fan 1 oant 31, it oere fan 'e dei fan 0 oant 23, it minuut fan 0 oant 59, en de twadde fan 0 oant 60, en in opsjonele dageljochting fan flagge. De wearden fan dizze nûmers moatte net binnen de oantsjuttings wêze; bygelyks in oere fan -1 betsjut 1 oere foar middernacht. De oarspronklike-nul Gregoriaanske kalinder wurdt oannommen, mei jier 0 foar it jier 1 en jier -1 foarôfgeand it jier 0. De tiid wurdt feroare yn 'e lokale tiidzone. As de dageljochting flagge posityf is, wurdt de tiid asjierrige tiid oannommen; as nul, wurdt de tiid as standerttiid feroare; en as negatyf (de standert), mktime () besiket te bepalen oft de dageljochting-tiid yn wurking is foar de opjûne tiid. As datum net genôch eleminten befettet of as de resultate tiid gjin berik is, jout mktime () -1 werom.

strftime ( [ formaat [ , timestamp ]] )

Formaaste timestamp neffens de specifikaasje yn formaat. De timestamp moat fan deselde foarm wêze as weromjûn troch systime () . As timestamp ûntbrekt, wurdt de aktuele tyddei brûkt. As formaat ûntbrekt, wurdt in standertformaat lykas oan de útfier fan datum (1) brûkt. Sjoch de spesififikaasje foar de strftime () -funksje yn ANSI C foar de formuostoarten dy't garandearre binne beskikber. In publike-domein-ferzje fan strftime (3) en in manpage foar it komt mei gawk ; As dizze ferzje brûkt waard om gawk te bouwen, dan wurde alle konversaasjes beskreaun yn dizze man-side beskikber foar gawk.

systime ()

Jou it hjoeddeistige dei werom as it oantal sekonden sûnt de Epoch (1970-01-01 00:00:00 UTC op POSIX-systeem).

Bit Manipulationsfunksjes

Begjin mei ferzje 3.1 fan gawk binne de folgjende bit-manipulaasjefunksjes beskikber. Se wurkje troch it konvertearjen fan dûbel-presysjale floatpunten wearden oant net tekene lange yntegers, de operaasje te dwaan, en it weromwikjen fan it resultaat werom nei floatpunten. De funksjes binne:

en ( v1 , v2 )

Gean werom yn 'e bitwise EN fan' e wearden dy 't steld wurde troch v1 en v2 .

compl ( val )

Gean it bitewurk oan kompensaasje fan val .

lshift ( val , count )

Weromsette de wearde fan val , ferpleatst nei links fan getallen.

of ( v1 , v2 )

Gean werom op 'e bitolje OR fan' e wearden dy 't fiede fan v1 en v2 .

rshift ( val , count )

Werom de wearde fan val werom , nei rjochtsbits ferpleatst.

xor ( v1 , v2 )

Gean werom nei de bitoarm XOR fan de wearden dy 't steld binne troch v1 en v2 .

Ynternasjonalisaasjefunksjes

Begjin mei ferzje 3.1 fan gawk kinne de folgjende funksjes fan jo programma AWK brûkt wurde foar oersetten strings op run-time. Foar folsleine details, sjoch GAWK: Effektive AWK-programmearring .

bindtextdomain ( map [ , domein ]

Beskriuwt de map wêr't gawk socht nei de .mo- bestannen, as gefolch dat se net of kinne net yn de '`standert' lokaasjes pleatst wurde (bygelyks by it testen). It jout de map wêr't domein 'ferbûn is'.

It standert domein is de wearde fan TEXTDOMAIN . As map it nul-teken ( "" ) is, dan bindtextdomain () jout de aktuele ferbining foar it opjûne domein .

dcgettext ( string [ , domein [ , kategory ]] )

Gout de oersetting fan tekenrige yn tekst-domein- domein foar lokaal kategory- kategory . De standertwearde foar domein is de aktuele wearde fan TEXTDOMAIN . De standertwearde foar kategory is "LC_MESSAGES" .

As jo ​​in wearde foar kategory leverje, dan moat it in string wêze lykweardich oan ien fan 'e bekende lokaal kategoryen beskreaun yn GAWK: Effektive AWK-programmearring . Jo moatte ek in tekstdomein leverje. Brûk TEXTDOMAIN as jo it aktive domein brûke wolle.

dcngettext ( string1 , string2 , nûmer [ , domein [ , kategory ]] )

Gout it plakhâlder foar it tal fan 'e oersetting fan string1 en string2 yn tekstomdomein domein foar lokaal kategory kategory . De standertwearde foar domein is de aktuele wearde fan TEXTDOMAIN . De standertwearde foar kategory is "LC_MESSAGES" .

As jo ​​in wearde foar kategory leverje, dan moat it in string wêze lykweardich oan ien fan 'e bekende lokaal kategoryen beskreaun yn GAWK: Effektive AWK-programmearring . Jo moatte ek in tekstdomein leverje. Brûk TEXTDOMAIN as jo it aktive domein brûke wolle.

USER-DEFINED FUNCTIONS

Funksjes yn AWK binne as folgjend definiearre:

Funksjenamme ( parameter list ) { statements }

Funksjes wurde útfierd as se opfrege binne fan binnen útdrukkingen yn sawol patroanen as aksjes. Aktuele parameters dy 't yn it funksjoneel oanbean wurde brûkt wurde om de formele paragrafen yn' e funksje ynstânsje te foarkommen. Arrays wurde troch referinsje trochjûn, oare fariabelen wurde troch wearde trochjûn.

Om't funksjes net oarspronklik in diel fan 'e AWK-taal binne, is de foarsjenning foar lokale fariabelen earder leuk: hja wurde as ekstra parameters yn' e parameter list ferklearre. De konvention is om lokale fariabelen te ûnderskieden fan echte parameter troch ekstra romtes yn de parameterlist. Bygelyks:

funksje f (p, q, a, b) # a en b binne lokale {...} / abc / {...; f (1, 2); ...}

De lofter klompen yn in funksjoneel is ferplichte om de funksjenamme fuortendaliks folgje te litten, sûnder yntervende wite romte. Dit is om in syntaktyske ambiguityt te foarkommen mei de oanbiederoperator. Dizze beheinings jildt net foar de boppesteande funksjes dy't hjirboppe neamd binne.

Funksjes kinne inoar oanroppe en kinne rekursyf wêze. Functieparamten dy 't brûkt wurde as lokale fariabelen binne ynitialisearre nei de nulle string en it getal nul op funksjebewurking.

Brûk werom werom om in wearde werom te jaan fan in funksje. De weromkommende wearde is net definiearre as der gjin wearde jûn wurdt, of as de funksje weromkommt troch `` falle '' fan 'e ein.

As --lint is foarkomt , warskôget gawk oer opropen nei ûnfoldwaande funksjes op parse-tiid, yn stee fan in runtiid . It opropjen fan in ûnjildige funksje yn rune tiid is in fatale flater.

It wurd func kin brûkt wurde yn plak fan funksje .

DYNAMICAL LOADING NEW FUNCTIONS

Begjin mei ferzje 3.1 fan gawk kinne jo dynamysk nije ynboude funksjes tafoegje oan de aktive gawk- interpreter. De folsleine details binne bûten it gebiet fan 'e hânlieding; Sjoch GAWK: Effektive AWK-programmearring foar de details.

útwreiding ( objekt , funksje )

Dynemyske keppelje it dielde objekndracht dat troch it objekt neamd wurdt, en funksjonearje yn dit objekt, om ynstallaasje út te fieren. Dizze moatte beide as snaren levere wurde. Gout de wearde werom troch funksje .

Dizze funksje wurdt dien en dokuminten yn GAWK: Effektive AWK-programmearring , mar alles oer dizze funksje kin wierskynlik feroarje yn 'e folgjende útjefte. Wy stroffelje oan dat jo dizze funksje net brûke foar alles dat jo net wolle om te werstellen.

SIGNALS

pgawk akseptearret twa sinjalen. SIGUSR1 makket it om in profiel- en funksjebestap te dumpen oan it profylfile , dat is ofwol awkprof.out of wat hokker triem neamd is mei de --profile- opsje. It giet dan fierder út. SIGHUP feroarsaket it profyl en funksjonearje as stap en folgje dan út.

EXAMPLES

Print en sortearje de brûkersnammen fan alle brûkers: BEGIN {FS = ":"} {print $ 1 | "sort"} Grafy- rigels yn in triem: {nlines ++} END {print nlines} Foar elke line troch syn nûmer yn de triem: {print FNR, $ 0} Ferbinje en rigel nûmer (in fariant op in tema): {print NR, $ 0}

Ynternalisaasje

String-konstanten binne sequinsjes fan tekens dy't yn dûbele quotes befetsje. Yn net-Ingelske sprekke omjouwing is it mooglik om strings yn it AWK-programma te markearjen as ferplichting oersetten oan de natuerlike natuerkunde. Dizze stringen wurde markearre yn it AWK-programma mei in liedende ûnderstreek (`` _ ''). Bygelyks,

gawk 'BEGIN {print "hallo, wrâld"}

altyd printsje hallo, wrâld . Mar,

gawk 'BEGIN {print _ "hallo, wrâld"}'

kinne print bonjour, monde yn Frankryk.

Der binne ferskate stappen belutsen by it produksearjen en útfieren fan in lokalisearre programma AWK.

1.

In BEGIN- aksje taheakje om in wearde te jaan oan de fariabele TEXTDOMAIN om it tekstdomein op te nimmen op in namme dy't jo programma ferbûn is.


BEGIN {TEXTDOMAIN = "myprog"}

Dit soarget dat jo de .mo- bestân fûn wurde mei jo programma. Sûnder dizze stap brûkt gawk de berjochten- domeinnamme, dy't wierskynlik gjin oersettings befettet foar jo programma.

2.

Markje alle stringen dy't oersetten wurde moatte mei liedende ûndersikers.

3.

As dat nedich is, brûke de dcgettext () en / of bindtextdomain () funksjes yn jo programma, sa't it kin.

4.

Run gawk --gen-po -f myprog.awk> myprog.po om in .po-bestân te generearjen foar jo programma.

5.

Meitsje passende oersettingen, en bouwe en ynstallearje in oerienkommende .mo bestân.

De ynternasjonalisearjende funksjes wurde yn folslein detail yn GAWK beskreaun: Effektive AWK-programmearring .

Posix Kompatibiliteit

In primêre doel foar gawk is kompatibiliteit mei de POSIX-standert, lykas mei de lêste ferzje fan UNIX awk . Oan dat stuit hat gawk de neikommende brûkers sichtbere funksjes dy't net beskreaun binne yn it AWK-boek, mar binne diel fan 'e ferzje fan Bell Laboratories fan awk , en binne yn' e POSIX-standert.

It boek jout oan dat de baanferbining fan 'e lansearring fan' e lokaasje bart, as it oare it argumint as in bestân iepenje soe, dat nei it BEGIN- blok útfierd wurdt. Wol, yn eardere ymplementaasjes, doe't sa'n opdracht foar elke triemnammen ferskynde, soe de opdracht barre foardat it BEGIN- blok útfierd waard. Applikaasjes kamen ôfhinklik fan 'e funksje.' 'As awk feroare is nei syn dokumintaasje, de -v- opsje foar it werjaan fan fariabelen foardat de programmaútfiering tafoege waard oan tafoegings fan tapassing fan' e âlde gedrach. (Dizze funksje waard oerienkommen troch sawol de Bell Laboratories en de GNU-ûntwikkelders.)

De -W- opsje foar útfiering spesifike funksjes is fan 'e POSIX-standert.

By it behanneljen fan arguminten brûkt gawk de spesjale opsje `` - '' om de ein fan arguminten te signaaljen. Yn kompatibiliteit modus warskôget it oer, mar oaren ûnthâlde net-definiearre opsjes. Yn normale operaasje wurde soksoarte arguminten trochjûn oer nei it programma AWK foar it ferwurkjen.

It AWK-boek definiearret net de weromkommende wearde fan srand () . De POSIX-standert hat it it sied it werombringen, om tagong te krijen fan willekeurige nûmersfolens. Dêrom komt de srand () yn gawk syn aktuele sied.

Oare nije funksjes binne: It gebrûk fan multiple -f- opsjes (fan MKS awk ); de UVIRON- array; de \ a , en \ v fluchtoetsen (oarspronklik yn gawk dien en werom yn 'e Bell Laboratories ferzje); de tolower () en toupper () ynboude funksjes (fan 'e ferzje fan Bell Laboratories); en de ANSI C-konfiguraasje-spesifikaasjes yn printf (dien earst yn 'e Bell Laboratories ferzje).

Histoaryske funksjes

Der binne twa funksjes fan histoaryske AWK-ymplementaasjes dy't gawk stipet. Earst is it mooglik om de lingte () ynboude funksje net allinich te neamen mei gjin argumint, mar sels sûnder klametten! Dus,

a = lingel # Holy Algol 60, Batman!

is itselde as ien fan

a = lingte ()
a = lingte ($ 0)

Dizze funksje wurdt markearre as 'ferwurde' 'yn' e POSIX-standert, en gawk jout in warskôging oer it gebrûk as --lint is oanjûn op de kommando-rigel.

De oare funksje is it gebrûk fan 'e trochgeande of de brekbefolking bûten it lichem fan in tiid , foar of docht loop. Tradysjoneel AWK-ymplementaasjes hawwe sa'n brûke behannele as lykweardich foar de folgjende statement. Gawk stipet dizze gebrûk as --tradysje is oanjûn.

GNU-útwreidings

Gawk hat in tal tafoegings oan POSIX awk . Se wurde beskreaun yn dit paragraaf. Alle hjirûnder beskreaune útwreidingen kinne útskeakele wurde troch op te roppen fan gawk mei de - tradisjonele opsje.

De folgjende funksjes fan gawk binne net beskikber yn POSIX awk .

*

Gjin poarte-syk wurdt útfierd foar triemmen oanjûn fia de -f- opsje. Dêrom is de fariant fan ' e AWKPATH gjin spesjaal.

*

De \ x ûntbrekke folchoarder. (Utskeakele mei - posysje .)

*

De fflush () -funksje. (Utskeakele mei - posysje .)

*

De mooglikheid om rigels te ferfolgjen nei ? en:. (Utskeakele mei - posysje .)

*

Octal en hexadezimal konstanten yn AWK-programma's.

*

De fariabele ARGIND , BINMODE , ERRNO , LINT , RT en TEXTDOMAIN binne net spesjale.

*

De fariabele IGNORECASE en har side-effekten binne net beskikber.

*

De fariabele FIELDWIDTHS en fêste-breed fjild te splitsen.

*

De PROCINFO- array is net beskikber.

*

It brûken fan RS as reguliere ekspresje.

*

De spesjale triemnammen dy 't beskikber binne foar I / O omlaat binne net erkend.

*

De | & operator foar it meitsjen fan co-prosessen.

*

De mooglikheid om yndividuele karakters te splitsen mei de nul-string as de wearde fan FS , en as it tredde argumint om te splitsen () .

*

It opsjonele twadde argument foar de close () funksje.

*

It opsjonele tredde argument foar de match () -funksje.

*

De mooglikheid om posysje-specifiers mei printf en sprintf () te brûken .

*

It gebrûk fan argyf wiskje om de folsleine ynhâld fan in array te wiskjen.

*

It gebrûk fan nextfile om it ferwurkjen fan it aktive ynfier triem te ferlitten.

*

De en () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () , of () , rshift () , strftime () , strtonum () , systime () en xor () funksjes.

*

Localizable strings.

*

It oanmeitsjen fan nije ynboude funksjes dynamysk mei de útwreiding () -funksje.

It AWK-boek definiearret de weromkommende wearde fan 'e close () funksje. Gawk 's close () jout de wearde werom fan fclose (3), of pklose (3), as it sluten fan in útfier bestân of pipe wurdt respektivelik. It jout de status fan de útgong fan 'e proses by it sluten fan in input pipe. De weromkommende wearde is -1 as de namme triem, pipe of ko-proses net iepene is mei in omlieding.

As gawk opnommen is mei de - tradisjonele opsje, as it fs- argumint oan de -F- opsje is `` t '', dan wurdt FS ynsteld oan it ljeppermerk. Tink derom dat it typen fan gawkF \ t ... gewoanlik de shell feroaret om 't', '', te fertsjinjen, en pas '`t \' oan de -F- opsje. Sûnt dit is in echt ûnsjoch spesjale gefal, it is net it standert gedrach. Dit gedrach liket ek net foarkommen as - posysje is oanjûn. Om echt karakter as it fjildôfspraak te krijen, it is it bêste om single quotes te brûken: gawk -F '\ t' ....

Besjoch oare kommando's : wachtsjen , lp , folslein , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , talk , motd , free , lpr , execl , fdisk , at , wa , iwconfig , ifconfig , vgdisplay , iepen , lsmod , ntohs , mailq , kill , wtmp