Leer die Linux Command - gawk

naam

Gawk - patroon skandering en verwerking taal

opsomming

gawk [POSIX of GNU style opsies] -f program-lêer [ - ] lêer ...
Gawk [POSIX of GNU style opsies] [ - ] program-teks lêer ...

pgawk [POSIX of GNU style opsies] -f program-lêer [ - ] lêer ...
pgawk [POSIX of GNU styl opsies] [ - ] program-teks lêer ...

beskrywing

Gawk is die GNU- projek se implementering van die AWK-programmeertaal. Dit is in ooreenstemming met die definisie van die taal in die POSIX 1003.2 Command Language and Utilities Standard. Hierdie weergawe is op sy beurt gebaseer op die beskrywing in die AWK-programmeertaal , deur Aho, Kernighan en Weinberger, met die bykomende funksies wat in die System V Release 4 weergawe van UNIX awk gevind word . Gawk bied ook meer onlangse Bell Laboratories awk uitbreidings, en 'n aantal GNU-spesifieke uitbreidings.

Pgawk is die profiele weergawe van gawk . Dit is identies in elke opsig om te gawk , behalwe dat die programme stadiger loop, en dit maak outomaties 'n uitvoeringsprofiel in die lêer awkprof.out wanneer dit klaar is. Sien die --profiel opsie, hieronder.

Die opdrag reël bestaan ​​uit opsies om self te gawk , die AWK program teks (indien nie deur die -f of -fil opsies verskaf nie) en waardes wat beskikbaar gestel word in die ARGC en ARGV vooraf gedefinieerde AWK veranderlikes.

Opsie-formaat

Gawk- opsies kan óf tradisioneel POSIX-een- letteropsies of lang-opsies vir GNU-style wees. POSIX opsies begin met 'n enkele `` - '', terwyl lang opsies begin met `` - ''. Lang opsies word verskaf vir beide GNU-spesifieke funksies en vir POSIX-mandaatseienskappe.

Na aanleiding van die POSIX-standaard word gawk- spesifieke opsies verskaf via argumente na die -W opsie. Meerdere -W opsies kan verskaf word. Elke -W opsie het 'n ooreenstemmende lang opsie, soos hieronder uiteengesit. Argumente vir lang opsies word óf verbind met die opsie deur 'n = teken, met geen tussenliggende spasies nie, of hulle mag in die volgende opdraglynargument verskaf word. Lang opsies kan afgekort word, solank die afkorting uniek bly.

opsies

Gawk aanvaar die volgende opsies, alfabeties gelys.

-F fs

--field-separator fs Gebruik fs vir die invoer veld skeider (die waarde van die FS vooraf gedefinieerde veranderlike).

-v var = val

--assign var = val Ken die waardeval toe aan die veranderlike var , voordat die uitvoering van die program begin. Sulke veranderlike waardes is beskikbaar vir die BEGIN- blok van 'n AWK-program.

-f program-lêer

- lêer program lêer Lees die AWK program bron van die lêer program-lêer , in plaas van vanaf die eerste command line argument. Veelvuldige -f (of --file ) opsies mag gebruik word.

-mf NNN

-mr NNN Stel verskeie geheue limiete vir die waarde NNN . Die f vlag stel die maksimum aantal velde in, en die r vlag stel die maksimum rekordgrootte in. Hierdie twee vlae en die -m opsie is van die Bell Laboratories se navorsingsweergawe van UNIX awk . Hulle word geïgnoreer deur gawk , aangesien gawk geen voorafbepaalde perke het nie.

-W Comp

-W tradisioneel

--compat

- Tradisionele uitvoering in die verenigbaarheid af. In die verenigbaarheid af optree gawk identies aan UNIX awk ; Nie een van die GNU-spesifieke uitbreidings word erken nie. Die gebruik van - tradisionele is verkies bo die ander vorms van hierdie opsie. Sien GNU EXTENSIONS , hieronder, vir meer inligting.

-W copyleft

-W kopiereg

--copyleft

- kopiereg Druk die kort weergawe van die GNU-kopiereginligtingsboodskap op die standaard-uitvoer af en sluit suksesvol uit.

-W dump-veranderlikes [ = lêer ]

- dump-veranderlikes [ = lêer ] Druk 'n gesorteerde lys van globale veranderlikes, hul tipes en finale waardes na lêer . As geen lêer verskaf word nie, gebruik gawk 'n lêer met die naam awkvars.out in die huidige gids.

Om 'n lys van al die globale veranderlikes te hê, is 'n goeie manier om te soek na tipografiese foute in u programme. U sal ook hierdie opsie gebruik as u 'n groot program met baie funksies het, en u wil seker wees dat u funksies nie per ongeluk globale veranderlikes gebruik wat u bedoel het om plaaslike te wees nie. (Dit is 'n besonder maklike fout om met eenvoudige veranderlike name soos ek , j , ensovoorts te maak.)

-W help

-W gebruik

help uit te voer

--gebruik Druk 'n relatief kort opsomming van die beskikbare opsies op die standaard uitset. (Volgens die GNU-koderingstandaarde , bied hierdie opsies 'n onmiddellike, suksesvolle uittrede.)

-W lint [ = fataal ]

--lint [ = fataal ] Verskaf waarskuwings oor konstrukte wat twyfelagtig of nie-draagbaar is vir ander AWK-implementasies. Met 'n opsionele argument van noodlottige , lint waarskuwings word fatale foute. Dit kan drasties wees, maar die gebruik daarvan sal beslis die ontwikkeling van skoner AWK-programme aanmoedig.

-W lint-oue

- oud-ou Waarskuwings oor konstrukte wat nie draagbaar is vir die oorspronklike weergawe van Unix awk nie .

-W gen-po

- gen-po Scan en ontleed die AWK-program en genereer 'n GNU .po formaat lêer op standaard uitvoer met inskrywings vir alle lokaliseerbare snare in die program. Die program self word nie uitgevoer nie. Sien die GNU gettext verspreiding vir meer inligting oor .po lêers.

-W nie-desimale data

- nie-desimale-data Herken okale en heksadesimale waardes in insetdata. Gebruik hierdie opsie met groot omsigtigheid!

-W posix

--posix Hiermee word die verenigbaarheidsmodus aangeskakel, met die volgende bykomende beperkings:

*

\ x ontsnapvolgorde word nie herken nie.

*

Slegs ruimte en oortjie dien as veldafskeidings wanneer FS op 'n enkele spasie ingestel word, newline nie.

*

Jy kan nie lyne voortgaan nie ? en :.

*

Die sinoniem funksie vir die sleutelwoordfunksie word nie erken nie.

*

Die operateurs ** en ** = kan nie in plaas van ^ en ^ = gebruik word nie .

*

Die funksie fflush () is nie beskikbaar nie.

-W profiel [ = prof_file ]

--profile [ = prof_file ] Stuur profiele data na prof_file . Die standaard is awkprof.out . Wanneer dit met gawk hardloop, is die profiel net 'n `` mooi gedrukte''-weergawe van die program. Wanneer dit met pgawk uitgevoer word , bevat die profiel uitvoeringstellings van elke stelling in die program in die linkermarge en funksieoproep- tellings vir elke gebruiker-gedefinieerde funksie.

-W herinterval

--re-interval Aktiveer die gebruik van interval uitdrukkings in gereelde uitdrukking ooreenstem (sien Gereelde uitdrukkings , hieronder). Intervaluitdrukkings was nie tradisioneel beskikbaar in die AWK-taal nie. Die POSIX-standaard het hulle bygevoeg, om awk en egrep in ooreenstemming met mekaar te maak. Maar hulle gebruik sal waarskynlik ou AWK-programme breek, so gawk bied dit slegs aan as hulle met hierdie opsie aangevra word, of wanneer --posix gespesifiseer word.

-W bron program-teks

--bron program-teks Gebruik program-teks as AWK program bronkode. Met hierdie opsie kan die biblioteekfunksies maklik gemeng word (gebruik word deur die -f en -file opsies) met bronkode wat op die opdraglyn ingevoer is. Dit is hoofsaaklik bedoel vir medium tot groot AWK-programme wat in dopskrifte gebruik word.

-W weergawe

- weergawe Druk weergawe inligting vir hierdie spesifieke kopie van gawk op die standaard uitset. Dit is handig hoofsaaklik om te weet of die huidige kopie van gawk op u stelsel op datum is met betrekking tot wat die Free Software Foundation versprei. Dit is ook handig wanneer u bugs rapporteer. (Volgens die GNU-koderingstandaarde , bied hierdie opsies 'n onmiddellike, suksesvolle uittrede.)

- Signaal die einde van die opsies. Dit is handig om verdere argumente aan die AWK-program self toe te laat om met 'n `` - '' te begin. Dit is hoofsaaklik vir konsekwentheid met die argument parsing konvensie wat gebruik word deur die meeste ander POSIX programme.

In die verenigbaarheidsmodus word enige ander opsies as ongeldig gemerk, maar word dit andersins geïgnoreer. In normale werking, solank die program teks verskaf is, word onbekende opsies oorgedra aan die AWK-program in die ARGV- skikking vir verwerking. Dit is veral nuttig vir die uitvoer van AWK-programme via die `` #! '' Uitvoerbare tolk meganisme.

AWK PROGRAM UITVOERING

'N AWK-program bestaan ​​uit 'n reeks patroon-aksie stellings en opsionele funksie definisies.

patroon { aksie state }

funksie naam ( parameter lys ) { stellings }

Gawk lees eers die program bron van die programlêer (s), indien van toepassing, van argumente tot - bron , of van die eerste nie-opsie-argument op die opdraglyn. Die -f en -bron- opsies kan verskeie kere op die opdraglyn gebruik word. Gawk lees die programteks asof al die programlêers s en command line-brontekste saam gekombineer is. Dit is nuttig vir die bou van biblioteke van AWK funksies, sonder om dit in elke nuwe AWK-program wat hulle gebruik, in te sluit. Dit bied ook die vermoë om biblioteekfunksies met command line programme te meng.

Die omgewingsveranderlike AWKPATH spesifiseer 'n soektog wat gebruik moet word wanneer bron lêers genaamd met die -f opsie gevind word. As hierdie veranderlike nie bestaan ​​nie, is die standaardpad ".: / Usr / local / share / awk" . (Die werklike gids kan wissel, afhangende van hoe gawk gebou en geïnstalleer is.) As 'n lêernaam wat aan die -f opsie gegee word 'n `` / '' karakter bevat, word geen soektog uitgevoer nie.

Gawk voer AWK-programme in die volgende volgorde uit. Eerstens word alle veranderlike opdragte wat deur die -v opsie gespesifiseer word, uitgevoer. Volgende, gawk stel die program saam in 'n interne vorm. Dan voer gawk die kode uit in die BEGIN- blokkie (s) (indien enige), en gaan dan voort om elke lêer wat in die ARGV- skikking genoem word, te lees. As daar geen lêers op die opdraglyn genoem word nie, lees gawk die standaard insette.

As 'n lêernaam op die bevellyn die vorm var = val het , word dit as 'n veranderlike opdrag behandel. Die veranderlike var sal die waardeval toegeken word . (Dit gebeur nadat enige BEGIN- blokke uitgevoer is.) Opdraglynveranderlike opdrag is die beste om dinamiese waardes aan die veranderlikes toe te wys. AWK gebruik om te bepaal hoe insette in velde en rekords gebreek word. Dit is ook nuttig vir die beheer van die staat as daar meerdere passasiers oor 'n enkele data lêer benodig word.

As die waarde van 'n spesifieke element van ARGV leeg is ( "" ), spring die gawk daaroor.

Vir elke rekord in die inset, toets gawk om te sien of dit ooreenstem met enige patroon in die AWK-program. Vir elke patroon wat die rekord pas, word die gepaardgaande aksie uitgevoer. Die patrone word getoets in die volgorde wat hulle in die program voorkom.

Ten slotte, nadat al die insette uitgeput is, voer gawk die kode uit in die END- blokkie (s) (indien enige).

Veranderlikes, rekords en velde

AWK veranderlikes is dinamies; hulle ontstaan ​​wanneer hulle die eerste keer gebruik word. Hul waardes is swaaipuntgetalle of snare, of albei, afhangende van hoe dit gebruik word. AWK het ook een dimensionele skikkings; skikkings met veelvoudige afmetings kan gesimuleer word. Verskeie vooraf gedefinieerde veranderlikes word gestel as 'n programloopbaan; Hierdie word as benodig beskryf en hieronder opgesom.

rekords

Normaalweg word rekords geskei deur nuwe karakters. U kan beheer hoe rekords geskei word deur waardes aan die ingeboude veranderlike RS toe te ken . As RS enige karakter is, skei die karakter rekords. Anders is RS 'n gereelde uitdrukking. Teks in die inset wat ooreenstem met hierdie gereelde uitdrukking skei die rekord. In die verenigbaarheidsmodus word egter slegs die eerste karakter van die snaarwaarde gebruik om rekords te skei. As RS op die nul-string gestel word, word rekords geskei deur leë lyne. Wanneer RS op die nulreeks gestel word, tree die newline-karakter altyd as 'n veldafskeider in, bo en behalwe die waarde wat FS mag hê.

Velde

Soos elke insetrekord gelees word, verdeel gawk die rekord in velde , met die waarde van die FS- veranderlike as die veldafskeider. As FS 'n enkele karakter is, word velde geskei deur daardie karakter. As FS die nul-string is, word elke individuele karakter 'n aparte veld. Andersins word verwag dat FS 'n volledige gereelde uitdrukking sal wees. In die spesiale geval dat FS 'n enkele ruimte is, word velde geskei deur lopies van spasies en / of tabs en / of nuwe lyne. (Maar sien die bespreking van --posix , hieronder). LET WEL: Die waarde van IGNORECASE (sien hieronder) beïnvloed ook hoe velde verdeel word wanneer FS 'n gereelde uitdrukking is, en hoe rekords geskei word wanneer RS 'n gereelde uitdrukking is.

As die FIELDWIDTHS veranderlike ingestel is op 'n spasie geskeide lys van nommers, word verwag dat elke veld vaste wydte het, en gawk verdeel die rekord met die gespesifiseerde breedtes. Die waarde van FS word geïgnoreer. Die toeken van 'n nuwe waarde aan FS oortree die gebruik van FIELDWIDS , en herstel die verstekgedrag.

Elke veld in die invoerrekord kan verwys word deur sy posisie, $ 1 , $ 2 , ensovoorts. $ 0 is die hele rekord. Velde moet nie deur konstantes verwys word nie:

n = 5
druk $ n

druk die vyfde veld in die insetrekord.

Die veranderlike NF is ingestel op die totale aantal velde in die invoerrekord.

Verwysings na nie-bestaande velde (dws velde na $ NF ) produseer die nul-string. Die toekenning van 'n nie-bestaande veld (bv. $ (NF + 2) = 5 ) verhoog die waarde van NF , skep tussenliggende velde met die nul-string as hul waarde en veroorsaak dat die waarde van $ 0 herbereken word, met die velde word geskei deur die waarde van OFS . Verwysings na negatiewe genommerde velde lei tot 'n noodlottige fout. Deur NF te verklein, word die waardes van velde verby die nuwe waarde wat verlore gaan en die waarde van $ 0 herbereken word, met die velde geskei deur die waarde van OFS .

Die toekenning van 'n waarde aan 'n bestaande veld veroorsaak dat die hele rekord herbou word wanneer $ 0 verwys word. Net so, as 'n waarde tot $ 0 toegeken word , word die rekord gesplitst, waardeur nuwe waardes vir die velde geskep word.

Ingeboude veranderlikes

Gawk se ingeboude veranderlikes is:

ARGC

Die aantal opdraglyn argumente (sluit nie opsies in om gawk , of die program bron).

ARGIND

Die indeks in ARGV van die huidige lêer wat verwerk word.

ARGV

Array van bevellyn argumente. Die skikking word van 0 na ARGC - 1 geïndekseer. Die dinamiese verandering van die inhoud van ARGV kan die lêers wat vir data gebruik word, beheer.

BINMODE

Op nie-POSIX-stelsels, spesifiseer die gebruik van `` binêre''-modus vir alle lêer I / O. Numeriese waardes van 1, 2 of 3, spesifiseer dat insetlêers, uitvoer lêers, of alle lêers, onderskeidelik, binêre I / O moet gebruik. Stringwaardes van "r" of "w" spesifiseer dat insetlêers, of uitsetlêers onderskeidelik, binêre I / O moet gebruik. Stringwaardes van "rw" of "wr" spesifiseer dat alle lêers binêre I / O moet gebruik. Enige ander string waarde word behandel as "rw" , maar genereer 'n waarskuwing boodskap.

CONVFMT

Die omskakeling formaat vir nommers, "% .6g" , by verstek.

ENVIRON

'N Skikking wat die waardes van die huidige omgewing bevat. Die skikking word geïndekseer deur die omgewingsveranderlikes, elke element is die waarde van daardie veranderlike (bv. ENVIRON ["HOME"] mag dalk tuis / arnold wees ). Die verandering van hierdie skikking beïnvloed nie die omgewing wat gesien word deur programme wat deur middel van redireksie of die stelsel () funksie gawk spruit nie.

Errno

As 'n stelselfout voorkom, word 'n omleiding vir getline gedoen , tydens 'n lees vir getline , of tydens 'n sluit () , dan sal ERRNO 'n string bevat wat die fout beskryf. Die waarde is onderhewig aan vertaling in nie-Engelse lokaliteite.

FIELDWIDTHS

'N Wit-spasie geskeide lys van veldbreedte. Wanneer ingestel, analiseer gawk die insette in velde met vaste wydte, in plaas van die waarde van die FS- veranderlike as die veldafskeider te gebruik.

LÊERNAAM

Die naam van die huidige insetlêer. As daar geen lêers op die opdraglyn gespesifiseer is nie, is die waarde van FILENAME `` - ''. FILENAME is egter onbeperk binne die BEGIN- blokkie (tensy dit deur getline gestel word ).

FNR

Die insetrekordnommer in die huidige insetlêer.

FS

Die invoerveldafskeider, 'n spasie by verstek. Sien velde hierbo.

IGNORECASE

Beheer die sensitiwiteit van alle gereelde uitdrukkings en snaarbewerkings. As IGNORECASE n nie-nul waarde het, dan word stringvergelykings en patroonpassing in reëls, veldverdeling met FS , rekord skeiding met RS , gereelde uitdrukking wat ooreenstem met ~ en ! ~ , En die gensub () , gsub () , indeks () , match () , split () en sub () ingeboude funksies, ignoreer alle gevalle wanneer gereelde uitdrukkingsoperasies gedoen word. LET WEL: Array-subskripsie word nie geraak nie, en die asort () -funksie is ook nie.

Dus, as IGNORECASE nie gelyk is aan nul, / aB / pas al die stringe "ab" , "aB" , "Ab" en "AB" . Soos met alle AWK veranderlikes, is die aanvanklike waarde van IGNORECASE nul, dus is alle gewone uitdrukking en snaaroperasies gewoonlik hooflettergevoelig. Onder Unix word die volledige ISO 8859-1 Latyns-1 karakterset gebruik wanneer die geval geïgnoreer word.

pluis

Bied dinamiese beheer van die - lint opsie van binne 'n AWK program. Wanneer dit waar is, druk gawk lint waarskuwings. Wanneer dit vals is, beteken dit nie. Wanneer die stringwaarde "fataal" toegeken word , word lintwaarskuwings noodlottige foute, presies soos - lint = fataal . Enige ander werklike waarde druk net waarskuwings uit.

NF

Die aantal velde in die huidige insetrekord.

NR

Die totale aantal insette rekords wat tot dusver gesien is.

OFMT

Die uitsetformaat vir nommers, "% .6g" , by verstek.

OVS

Die uitset veld skeider, 'n spasie by verstek.

ORS

Die uitsetrekordskeider, by verstek 'n nuwe lyn.

PROCINFO

Die elemente van hierdie skikking bied toegang tot inligting oor die lopende AWK-program. Op sommige stelsels kan daar elemente in die skikking wees, "groep1" deur "groep n " vir sommige n , wat is die aantal aanvullende groepe wat die proses het. Gebruik die in- operateur om te toets vir hierdie elemente. Die volgende elemente is gewaarborg om beskikbaar te wees:

PROCINFO [ "egid"]

die waarde van die getegid (2) stelseloproep.

PROCINFO [ "euid"]

die waarde van die geteuid (2) stelseloproep.

PROCINFO [ "FS"]

"FS" as veldverdeling met FS in werking is, of "FIELDWIDTHS" as veldverdeling met FIELDWIDTHS in werking is.

PROCINFO [ "gid"]

die waarde van die getgid (2) stelseloproep.

PROCINFO [ "pgrpid"]

die proses groep ID van die huidige proses.

PROCINFO [ "pid"]

die proses-ID van die huidige proses.

PROCINFO [ "ppid"]

die ouerproses-ID van die huidige proses.

PROCINFO [ "uid"]

die waarde van die getuid (2) stelseloproep.

RS

Die insetrekordskeider, by verstek 'n nuwe lyn.

RT

Die rekord terminator. Gawk stel RT aan die insetteks wat ooreenstem met die karakter of reëlmatige uitdrukking wat deur RS gespesifiseer word.

RSTART

Die indeks van die eerste karakter wat ooreenstem met die wedstryd () ; 0 as geen wedstryd. (Dit impliseer dat karakterindekse by een begin.)

RLENGTH

Die lengte van die tou wat ooreenstem met die wedstryd () ; -1 as geen wedstryd.

SUBSEP

Die karakter wat gebruik word om verskeie subskripsies in skikkingelemente te skei, is standaard "\ 034" .

TEXTDOMAIN

Die teks domein van die AWK program; gebruik om die gelokaliseerde vertalings vir die program se snare te vind.

skikkings

Skikkings word onderskryf met 'n uitdrukking tussen vierkantige hakies ( [ en ] ). As die uitdrukking 'n uitdrukkingslys is ( ekspr , expr ...) dan is die skikkingskripsie 'n string wat bestaan ​​uit die samevoeging van die (string) waarde van elke uitdrukking, geskei deur die waarde van die SUBSEP- veranderlike. Hierdie fasiliteit word gebruik om vermenigvuldige afmetings te simuleer. Byvoorbeeld:

i = "a"; j = "B"; k = "C"
x [i, j, k] = "hallo, wêreld \ n"

ken die string "hello, world \ n" aan die element van die skikking x wat deur die string "A \ 034B \ 034C" geïndekseer word. Alle skikkings in AWK is assosiatief, dws geïndekseer deur stringwaardes.

Die spesiale operateur in kan gebruik word in 'n as of terwyl stelling om te sien of 'n skikking 'n indeks het wat uit 'n bepaalde waarde bestaan.

indien (val in skikking) druk skikking [val]

As die skikking veelvoudige intekenare het, gebruik (i, j) in skikking .

Die in konstruksie kan ook in 'n vir lus gebruik word om oor al die elemente van 'n skikking te herhaal.

'N Element kan uit 'n skikking verwyder word deur die skrap- stelling te gebruik. Die verwydering stelling kan ook gebruik word om die hele inhoud van 'n skikking te verwyder, net deur die skikking naam sonder 'n subskripsie te spesifiseer.

Veranderlike Tik en Omskakeling

Veranderlikes en velde mag wees (swewende punt) getalle, of snare of albei. Hoe die waarde van 'n veranderlike geïnterpreteer word hang af van sy konteks. As dit in 'n numeriese uitdrukking gebruik word, sal dit as 'n nommer beskou word. As dit as 'n tou gebruik word, word dit as 'n tou behandel.

Om 'n veranderlike te dwing om as 'n nommer behandel te word, voeg 0 daaraan toe; om dit te dwing om as 'n tou hanteer te word, te koppel met die nul-string.

Wanneer 'n string omskep moet word na 'n getal, word die omskakeling bereik met behulp van strtod (3). 'N Aantal word omgeskakel na 'n string deur die waarde van CONVFMT as 'n snaarf- formaat (3) te gebruik, met die numeriese waarde van die veranderlike as die argument. Alhoewel al die getalle in AWK swaaipunt is, word integrale waardes altyd as heelgetalle omgeskakel. So, gegee

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

Die veranderlike b het 'n stringwaarde van "12" en nie "12.00" nie .

Gawk verrig vergelykings soos volg: As twee veranderlikes numeries is, word hulle numeries vergeleke. As een waarde numeries is en die ander een 'n stringwaarde het wat 'n `` numeriese string '' is, word vergelykings ook numeries gedoen. Andersins word die numeriese waarde omgeskakel na 'n tou en 'n stringvergelyking word uitgevoer. Twee snare word natuurlik as snare vergelyk. Let daarop dat die POSIX-standaard die konsep van `` numeriese string '' oral toepas, selfs na snaarkonstantes. Dit is egter duidelik verkeerd, en gawk doen dit nie. (Gelukkig is dit vasgestel in die volgende weergawe van die standaard.)

Let daarop dat snaarkonstantes, soos "57" , nie numeriese snare is nie , hulle is snaarkonstantes. Die idee van `` numeriese string '' is slegs van toepassing op velde, getline insette, FILENAME , ARGV elemente, ENVIRON elemente en die elemente van 'n skikking wat geskep is deur split () wat numeriese stringe is. Die basiese idee is dat gebruikersinvoer , en slegs gebruikersinvoer, wat numeries lyk, moet so behandel word.

Uninitialized veranderlikes het die numeriese waarde 0 en die stringwaarde "" (die nul, of leë string).

Octale en Hexadecimale Konstantes

Begin met weergawe 3.1 van gawk, jy mag C-style oktaal en heksadesimale konstantes gebruik in jou AWK program bronkode. Byvoorbeeld, die oktale waarde 011 is gelyk aan desimale 9 , en die heksadesimale waarde 0x11 is gelyk aan desimale 17.

String Konstantes

Stringkonstantes in AWK is rye karakters tussen dubbele aanhalingstekens ( " ). Binne snare word sekere ontsnappingsreekse erken, soos in C. Dit is:

\\

'N letterlike terugslag.

\ n

Die `` alert''-karakter; gewoonlik die ASCII BEL karakter.

\ b

Back Space.

\ f

-Vorm te voed.

\ N

nuwe lyn.

\ r

vervoer terugkeer.

\ t

horisontale oortjie.

\ v

vertikale oortjie.

\ x heks syfers

Die karakter wat deur die string heksadesimale syfers voorgestel word, volg die \ x . Soos in ANSIC word alle volgende heksadesimale syfers as deel van die ontsnapvolgorde beskou. (Hierdie funksie moet ons iets vertel oor taalontwerp deur die komitee.) Byvoorbeeld, "\ x1B" is die ASCIIESC (ontsnap) karakter.

\ ddd

Die karakter wat voorgestel word deur die 1-, 2-, of 3-syfer volgorde van oktale syfers. Byvoorbeeld, "\ 033" is die ASCII ESC (ontsnap) karakter.

\ c

Die letterlike karakter c .

Die ontsnapvolgorde kan ook gebruik word binne konstante gereelde uitdrukkings (bv., / [\ T \ f \ n \ r \ v] / vuurhoutjies-witkarakters).

In die verenigbaarheidsmodus word die karakters wat deur die okale en heksadesimale ontsnapreekse voorgestel word, letterlik behandel wanneer dit gebruik word in gewone uitdrukkingskonstantes. Dus, / a \ 52b / is ekwivalent aan / a \ * b / .

Patrone en aksies

AWK is 'n lyngeoriënteerde taal. Die patroon kom eerste, en dan die aksie. Aksieverklarings is ingesluit in { en } . Of die patroon mag dalk ontbreek, of die aksie mag dalk ontbreek, maar natuurlik nie albei nie. As die patroon ontbreek, word die aksie uitgevoer vir elke enkele rekord van insette. 'N Ontbrekende aksie is gelykstaande aan

{druk}

wat die hele rekord druk.

Opmerkings begin met die `` # '' karakter, en gaan voort tot aan die einde van die reël. Blanke lyne kan gebruik word om stellings te skei. Normaalweg eindig 'n stelling met 'n nuwe lyn, maar dit is nie die geval vir lyne wat eindig in 'n ``, '', { ? , : , && , of || . Lyne wat eindig in doe of anders , het hul stellings outomaties voortgesit op die volgende reël. In ander gevalle kan 'n lyn voortgesit word met 'n ', in welke geval die nuwe lyn geïgnoreer sal word.

Meervoudige stellings kan op een reël geplaas word deur hulle met 'n ``; '' te skei. Dit geld vir beide die stellings binne die aksie-deel van 'n patroon-aksie-paar (die gewone geval) en die patroon-aksie-stellings self.

patrone

AWK-patrone kan een van die volgende wees:

BEGIN EINDE / reëlmatige uitdrukking / relasionele uitdrukkingspatroon & & patroonpatroon || patroonpatroon ? patroon : patroon ( patroon ) ! patroonpatroon1 , patroon2

BEGIN en EINDE is twee spesiale soorte patrone wat nie teen die insette getoets word nie. Die aksiewerkwoorde van alle BEGIN- patrone word saamgesmelt asof al die stellings in 'n enkele BEGIN- blokkie geskryf is. Hulle word uitgevoer voordat enige van die insette gelees word. Net so word al die END- blokke saamgesmelt, en uitgevoer wanneer al die insette uitgeput is (of wanneer 'n uittreestelling uitgevoer word). BEGIN- en EINDE- patrone kan nie met ander patrone in patroonuitdrukkings gekombineer word nie. BEGIN- en EINDE- patrone kan nie ontbrekende aksieonderdele hê nie.

Vir / gereelde uitdrukking / patrone word die gepaardgaande stelling uitgevoer vir elke insetrekord wat ooreenstem met die gewone uitdrukking. Gereelde uitdrukkings is dieselfde as dié in egrep (1), en word hieronder opgesom.

'N Relasionele uitdrukking mag enige van die operateurs wat hieronder gedefinieer word, gebruik in die afdeling oor aksies. Dit toets gewoonlik of sekere velde ooreenstem met sekere gereelde uitdrukkings.

Die && , || , en ! operateurs is logies EN, logies OF, en logies NIE, onderskeidelik, soos in C. Hulle doen kortsluitingsevaluering, net soos in C, en word gebruik om meer primitiewe patroonuitdrukkings te kombineer. Soos in die meeste tale, kan hakies gebruik word om die volgorde van evaluering te verander.

Die ?: Operateur is soos dieselfde operateur in C. As die eerste patroon waar is, dan is die patroon wat gebruik word vir toetsing die tweede patroon, anders is dit die derde. Slegs een van die tweede en derde patrone word geëvalueer.

Die patroon1 , patroon2 vorm van 'n uitdrukking word 'n reekspatroon genoem. Dit pas by alle insette rekords wat begin met 'n rekord wat ooreenstem met patroon1 , en voortduur tot 'n rekord wat ooreenstem met patroon2 , insluitend. Dit kombineer nie met enige ander patroonuitdrukking nie.

Gereelde uitdrukkings

Gereelde uitdrukkings is die uitgebreide soort wat in egrep voorkom . Hulle is soos volg saamgestel uit karakters:

c

pas by die nie-metakkarakter c .

\ c

pas by die letterlike karakter c .

.

pas by enige karakter, insluitend newline.

^

pas by die begin van 'n tou.

$

pas by die einde van 'n tou.

[ abc ... ]

karakterlys, pas by enige van die karakters abc ....

[^ abc ... ]

negate karakter lys, pas by enige karakter behalwe abc ....

r1 | R2

afwisseling: ooreenstem met óf r1 of r2 .

R1R2

samevoeging: vuurhoutjies r1 , en dan r2 .

r +

pas een of meer r 's aan.

r *

pas by nul of meer r 's.

r ?

pas by nul of een r 's.

( r )

groepering: vuurhoutjies r .

r { n }

r { n ,}

r { n , m } Een of twee nommers binne hakies dui 'n interval uitdrukking aan . As daar een nommer in die hakies is, word die voorafgaande gereelde uitdrukking r n keer herhaal. As daar twee getalle is wat deur 'n komma geskei word, word r n tot m keer herhaal. As daar een getal is wat gevolg word deur 'n komma, word r ten minste n keer herhaal.

Intervaluitdrukkings is slegs beskikbaar indien óf --posix of --re-interval op die opdraglyn gespesifiseer word.

\ y

ooreenstem met die leë string aan die begin of die einde van 'n woord.

\ B

pas die leë string binne 'n woord.

\ <

pas by die leë string aan die begin van 'n woord.

\>

pas die leë string aan die einde van 'n woord.

\ w

pas by enige woordkomponent-karakter (letter, syfer of onderstreep).

\ W

pas by enige karakter wat nie woord-bestanddeel is nie.

\ `

pas by die leë string aan die begin van 'n buffer (string).

\ '

pas by die leë string aan die einde van 'n buffer.

Die ontsnapvolgorde wat geldig is in snaarkonstantes (sien hieronder) is ook geldig in gereelde uitdrukkings.

Karakters is 'n nuwe funksie wat in die POSIX-standaard bekend gestel word. 'N Karakterklas is 'n spesiale notasie vir die omskrywing van lyste van karakters wat 'n spesifieke kenmerk het, maar waar die werklike karakters self van land tot land kan wissel en / of van karakter tot karakterset. Byvoorbeeld, die idee van wat 'n alfabetiese karakter is, verskil in die VSA en in Frankryk.

'N Karakterklas is slegs geldig in 'n gewone uitdrukking binne die hakies van 'n karakterlys. Karakter klasse bestaan ​​uit [: , 'n navraag wat die klas aandui en :] . Die karakters wat deur die POSIX-standaard gedefinieer word, is:

[: alnum:]

Alfanumeriese karakters.

[Alpha:]

Alfabetiese karakters.

[: leeg:]

Ruimte of oortjie karakters.

[: CNTRL:]

Beheer karakters.

[: syfer:]

Numeriese karakters.

[: grafiek:]

Karakters wat beide drukbaar en sigbaar is. ('N Spasie is afdrukbaar, maar nie sigbaar nie, terwyl 'n a albei is.)

[: laer:]

Laer geval alfabetiese karakters.

[: Druk:]

Drukbare karakters (karakters wat nie karakters beheer nie.)

[: punct:]

Leestekens (karakters wat nie letter, syfers, beheerkarakters of spasie karakters is nie).

[: ruimte:]

Ruimtekarakters (soos ruimte, oortjie en formevoer, om 'n paar te noem).

[: boonste:]

Hoë-alfabetiese karakters.

[: xdigit:]

Karakters wat heksadesimale syfers is.

Byvoorbeeld, voor die POSIX-standaard, om alfanumeriese karakters te pas, moes jy / [A-Za-z0-9] / . As jou karakterset ander alfabetiese karakters daarin gehad het, sou dit nie ooreenstem met hulle nie, en as jou karakterset anders van ASCII ingevul het, kom dit dalk nie eens ooreen met die ASCII alfanumeriese karakters nie. Met die POSIX-karakterklasse kan jy skryf [[: alnum:]] / , en dit pas by die alfabetiese en numeriese karakters in jou karakterset.

Twee addisionele spesiale reekse kan in karakterlyste verskyn. Dit is van toepassing op nie-ASCII-karakters, wat enkelsimbole (genoem versamelelemente ) wat met meer as een karakters voorgestel word, sowel as verskeie karakters wat ooreenstem met die versameling of sortering van doeleindes. (Byvoorbeeld, in die Frans is 'n duidelike `` e '' en 'n graf-geaccentueerde e` ekwivalent.)

Versamel simbole

'N Versamelingsimbool is 'n multi-karakter-versamelingselement ingesluit in [. en .] . Byvoorbeeld, as ch 'n versamelingselement is, is [[.ch.]] 'N gewone uitdrukking wat ooreenstem met hierdie versamelingselement, terwyl [ch] 'n reëlmatige uitdrukking is wat óf c óf h ooreenstem.

Gelykwaardigheidsklasse

'N Gelykwaardigheidsklas is 'n lokaal-spesifieke naam vir 'n lys karakters wat ekwivalent is. Die naam is ingesluit in [= en =] . Byvoorbeeld, die naam e kan gebruik word om alle `` e, '' `` e ',' 'en `` e` te verteenwoordig.' 'In hierdie geval is [[= e =]] 'n gereelde uitdrukking wat pas by enige van e , e ' of e .

Hierdie eienskappe is baie waardevol in nie-Engelssprekende plekke. Die biblioteek funksioneer wat gawk gebruike vir gereelde uitdrukking wat pas, herken tans slegs POSIX-karakters; hulle herken nie simboliese simbole of ekwivalentieklasse nie.

Die \ y , \ B , \ < , \> , \ w , \ W , \ , en \ ' operateurs is spesifiek om te gawk ; Hulle is uitbreidings gebaseer op geriewe in die GNU-reguliere uitdrukkingsbiblioteke.

Die verskillende command line opsies bepaal hoe gawk karakters in gereelde uitdrukkings interpreteer.

Geen opsies nie

In die standaardgeval verskaf gawk al die fasiliteite van POSIX-reguliere uitdrukkings en die GNU-reguliere uitdrukkingsoperateurs soos hierbo beskryf. Intervaluitdrukkings word egter nie ondersteun nie.

--posix

Slegs POSIX-reguliere uitdrukkings word ondersteun, die GNU-operateurs is nie spesiaal nie. (Byvoorbeeld, \ w pas by 'n letterlike w ). Intervaluitdrukkings word toegelaat.

--traditional

Tradisionele Unix awk gereelde uitdrukkings word ooreenstem. Die GNU-operateurs is nie spesiaal nie, interval uitdrukkings is nie beskikbaar nie, en ook nie die POSIX-karakterklasse ( [[: alnum:]] en so aan). Karakters wat beskryf word deur die oktale en heksadesimaal-ontsnapvolgorde word letterlik behandel, selfs al verteenwoordig hulle gereelde uitdrukking-meta karakters.

--re-interval

Laat interval uitdrukkings toe in gereelde uitdrukkings, selfs al is - tradisioneel voorsien.

aksies

Aksiestellings word in hakies, { en } ingesluit . Aksiestellings bestaan ​​uit die gewone opdrag, voorwaardelike en lusverklarings wat in die meeste tale voorkom. Die operateurs, beheerstate en inset / afvoer-stellings beskikbaar is patroon na dié in C.

operateurs

Die operateurs in AWK, in volgorde van dalende voorrang, is

( ... )

groepering

$

Veldverwysing.

++ -

Toename en verlaging, beide voorvoegsel en voorvoegsel.

^

Eksponering ( ** kan ook gebruik word, en ** = vir die opdragoperateur).

+ -!

Unaire plus, unêre minus, en logiese negasie.

* /%

Vermenigvuldiging, deling en modulus.

+ -

Optel en aftrek.

ruimte

Stringsamenstelling.

<>

<=> =

! = == Die gereelde verhoudingsoperateurs.

~! ~

Gereelde uitdrukking wedstryd, negatiewe wedstryd. LET WEL: Moenie 'n konstante reëlmatige uitdrukking ( / foo / ) aan die linkerkant van 'n ~ of ! ~ Gebruik nie. Gebruik slegs een aan die regterkant. Die uitdrukking / foo / ~ exp het dieselfde betekenis as (($ 0 ~ / foo /) ~ exp ) . Dit is gewoonlik nie wat bedoel is nie.

in

Array lidmaatskap.

&&

Logiese AND.

||

Logiese OF.

?:

Die C voorwaardelike uitdrukking. Dit het die vorm expr1 ? expr2 : expr3 . As expr1 waar is, is die waarde van die uitdrukking expr2 , anders is dit expr3 . Slegs een van expr2 en expr3 word geëvalueer.

= + = - =

* = / =% = ^ = Opdrag. Beide absolute opdrag ( var = waarde ) en operateuropdrag (die ander vorms) word ondersteun.

Beheerstate

Die beheerstellings is soos volg:

as ( voorwaarde ) stelling [ anders stelling ] terwyl ( voorwaarde ) stelling doen stelling terwyl ( voorwaarde ) vir ( ekspr1 ; expr2 ; expr3 ) stelling vir ( var in skikking ) stelling breek voortgaan skrap skikking [ indeks ] skrap skyfuitgang [ uitdrukking ] stellings }

I / O Verklarings

Die insette / uitset stellings is soos volg:

sluit ( lêer [ , hoe ] )

Maak lêer, pyp of mede-proses toe. Die opsionele manier moet slegs gebruik word wanneer een einde van 'n tweerigtingpyp gesluit word tot 'n mede-proses. Dit moet 'n stringwaarde wees, óf "na" of "van" .

getline

Stel $ 0 vanaf die volgende insetrekord stel NF , NR , FNR .

getline < lêer

Stel $ 0 vanaf die volgende rekord van die lêer ; stel NF .

getline var

Stel var van volgende insetrekord; stel NR , FNR .

getline var < lêer

Stel var van die volgende rekord van die lêer .

opdrag | getline [ var ]

Begin opdrag om die uitset te pype óf in $ 0 of var , soos hierbo.

opdrag | & getline [ var ]

Begin opdrag as 'n ko-proses om die uitset óf in $ 0 of var , soos hierbo te wys. Co-prosesse is 'n gawk uitbreiding.

volgende

Hou op om die huidige insetrekord te verwerk. Die volgende insetrekord word gelees en verwerking begin met die eerste patroon in die AWK-program. As die einde van die insetdata bereik word, word die END- blokkie (s), indien enige, uitgevoer.

nextfile

Hou op met die verwerking van die huidige insetlêer. Die volgende insetrekordlees kom van die volgende insetlêer. FILENAME en ARGIND word opgedateer, FNR is herstel na 1, en die verwerking begin met die eerste patroon in die AWK-program. As die einde van die insetdata bereik word, word die END- blokkie (s), indien enige, uitgevoer.

druk

Druk die huidige rekord af. Die uitsetrekord word beëindig met die waarde van die ORS- veranderlike.

druk expr-lys

Druk uitdrukkings uit. Elke uitdrukking word geskei deur die waarde van die OFS- veranderlike. Die uitsetrekord word beëindig met die waarde van die ORS- veranderlike.

druk expr-list > lêer

Druk uitdrukkings op lêer . Elke uitdrukking word geskei deur die waarde van die OFS- veranderlike. Die uitsetrekord word beëindig met die waarde van die ORS- veranderlike.

printf fmt, expr-lys

Formateer en druk.

printf fmt, expr-list > lêer

Formateer en druk op lêer .

stelsel ( cmd-lyn )

Voer die opdrag cmd-line uit , en gee die uitgangstatus terug. (Dit is dalk nie beskikbaar op nie-POSIX-stelsels.)

fflush ( [ lêer ] )

Spoel enige buffers wat geassosieer word met die oopuitsetlêer of pyplêer. As die lêer ontbreek, word die standaard uitset gespoel. As die lêer die nul-string is, dan het al die oop uitvoer lêers en pype hul buffers gespoel.

Bykomende afvoer-aansture word toegelaat vir druk en printf .

druk ... >> lêer

voeg uitset by die lêer .

druk ... | bevel

skryf op 'n pyp.

druk ... | en opdrag

stuur data na 'n mede-proses.

Die getline- opdrag gee 0 op einde van lêer en -1 op 'n fout. By 'n fout bevat ERRNO 'n string wat die probleem beskryf.

LET WEL: As u 'n pyp of ko-proses gebruik om te skuif , of vanaf druk of druk in 'n lus, moet u naby () gebruik om nuwe gevalle van die opdrag te skep. AWK sluit nie outomaties pype of mede-prosesse wanneer hulle EOF terugbesorg nie.

Die gedrukte verklaring

Die AWK weergawes van die printf statement en sprintf () funksie (sien hieronder) aanvaar die volgende omskrywing spesifikasie formate:

% c

'N ASCII-karakter. As die argument vir % c numeriese is, word dit as 'n karakter behandel en gedruk. Andersins word die argument aanvaar dat dit 'n string is, en die enigste eerste karakter van die string word gedruk.

% d , % i

'N desimale getal (die heelgetal deel).

% e,% E

'N Swewende puntnommer van die vorm [-] d.dddddde [+ -] dd . Die % E- formaat gebruik E in plaas van e .

% f

'N Swewende puntnommer van die vorm [-] ddd.dddddd .

% g,% G

Gebruik % e of % f omskakeling, wat ookal korter is, met onbeduidende nulle onderdruk. Die % G- formaat gebruik % E in plaas van % e .

% o

'N Ongetekende oktale getal (ook 'n heelgetal).

% u ' n Ongetekende desimale nommer (weer, 'n heelgetal).

% s

'N Karakterstring.

% x,% X

'N Ongetekende heksadesimale getal ('n heelgetal). Die % X- formaat gebruik ABCDEF in plaas van abcdef .

%%

'N enkele % karakter; geen argument word omskep nie.

Opsionele, addisionele parameters kan tussen die % en die kontrolelys lê:

tel $

Gebruik die telling se argument op hierdie punt in die formatering. Dit word 'n posisionele spesifiseerder genoem en is hoofsaaklik bedoel vir gebruik in vertaalde weergawes van formaatstringe, nie in die oorspronklike teks van 'n AWK-program nie. Dit is 'n gawk uitbreiding.

-

Die uitdrukking moet in sy veld gelaat word.

ruimte

Vir numeriese omskakelings, voorvoeglike positiewe waardes met 'n spasie en negatiewe waardes met 'n minusteken.

+

Die plus teken, wat gebruik word voor die breedte wysiger (sien hieronder), sê dat jy altyd 'n teken vir numeriese omskakelings moet verskaf, selfs al is die data wat geformateer moet word positief. Die + oortree die ruimte wysiger.

#

Gebruik 'n `` alternatiewe vorm '' vir sekere beheerbriewe. Vir % o , verskaf 'n leidende nul. Vir % x , en % X , verskaf 'n leidende 0x of 0X vir 'n nie-nul-resultaat. Vir % e , % E , en % f bevat die resultaat altyd 'n desimale punt. Vir % g , en % G , nulverwerkings word nie van die resultaat verwyder nie.

0

'N Toonaangewende 0 (nul) dien as 'n vlag, wat aandui dat die uitvoer moet geprop word met nulde in plaas van spasies. Dit geld selfs vir nie-numeriese uitvoerformate. Hierdie vlag het slegs 'n effek wanneer die veldwydte wyer is as die waarde wat gedruk moet word.

wydte

Die veld moet op hierdie breedte geplaas word. Die veld is gewoonlik vol spasies. As die 0- vlag gebruik is, is dit met nulde gevul.

. Prec

'N Nommer wat die akkuraatheid spesifiseer wat gebruik moet word tydens die drukwerk. Vir die % e , % E , en % f formate, spesifiseer dit die aantal syfers wat u wil druk, regs van die desimale punt. Vir die % g , en % G formate, spesifiseer dit die maksimum aantal betekenisvolle syfers. Vir die % d , % o , % i , % u , % x en % X- formate, spesifiseer dit die minimum aantal syfers om te druk. Vir % s , spesifiseer dit die maksimum aantal karakters uit die string wat gedruk moet word.

Die dinamiese breedte en presiese vermoëns van die ANSI C printf () roetines word ondersteun. A * in die plek van óf die wydte of presifikasies, veroorsaak dat hulle waardes van die argumentlys na printf of sprintf () geneem word . Om 'n posisionele spesifiseerder met 'n dinamiese breedte of akkuraatheid te gebruik, verskaf die telling $ na die * in die formaatstring. Byvoorbeeld, "% 3 $ * 2 $. * 1 $ s" .

Spesiale Lêernaam

As ek I / O omskakel van druk of printf na 'n lêer, of via 'n skyfie van 'n lêer, herken gawk sekere spesiale lêername intern. Hierdie lêername gee toegang tot oop lêerbeskrywers wat geërf word uit die ouerproses van gawk (gewoonlik die dop). Hierdie lêername kan ook op die opdraglyn gebruik word om data-lêers te noem. Die lêername is:

/ dev / stdin

Die standaard insette.

/ dev / stdout

Die standaard uitset.

/ dev / stderr

Die standaard foutuitset.

/ dev / fd / n

Die lêer wat verband hou met die oop lêerbeskrywer n .

Dit is veral nuttig vir foutboodskappe. Byvoorbeeld:

druk "Jy het dit geblaas!" > "/ dev / stderr"

terwyl jy andersins moet gebruik

druk "Jy het dit geblaas!" | "kat 1> & 2"

Die volgende spesiale lêername kan gebruik word met die | & co-proses operateur vir die maak van TCP / IP netwerk verbindings.

/ inet / tcp / lport / rhost / rport

Lêer vir TCP / IP konneksie op plaaslike poort lport na afgeleë host rhost op afgeleë poort rport . Gebruik 'n poort van 0 om die stelsel 'n hawe te kies.

/ inet / udp / lport / rhost / rport

Soortgelyk, maar gebruik UDP / IP in plaas van TCP / IP.

/ inet / rou / lport / rhost / rport

Gereserveer vir toekomstige gebruik.

Ander spesiale lêername bied toegang tot inligting oor die lopende gawk- proses. Hierdie lêername is nou verouderd. Gebruik die PROCINFO- skikking om die inligting wat hulle verskaf, te verkry. Die lêername is:

/ dev / pid

As u hierdie lêer lees, word die proses-ID van die huidige proses, in desimale, met 'n nuwe lyn beëindig.

/ dev / ppid

As u hierdie lêer lees, word die ouerproses-ID van die huidige proses, in desimale, beëindig met 'n nuwe lyn.

/ dev / pgrpid

As u hierdie lêer lees, word die prosesgroep-ID van die huidige proses, in desimale, met 'n nuwe lyn beëindig.

/ dev / gebruiker

As u hierdie lêer lees, word 'n enkele rekord beëindig met 'n nuwe lyn. Die velde word geskei met spasies. $ 1 is die waarde van die getuid (2) stelseloproep, $ 2 is die waarde van die geteid (2) stelseloproep, $ 3 is die waarde van die getgid (2) stelseloproep en $ 4 is die waarde van die getegid (2) stelseloproep. As daar enige bykomende velde is, is dit die groep-ID's wat deur groepe (2) ontvang word. Meervoudige groepe word moontlik nie op alle stelsels ondersteun nie.

Numeriese funksies

AWK het die volgende ingeboude rekenkundige funksies:

atan2 ( y , x )

Wys die arktangent van y / x in radiale.

cos ( expr )

Wys die cosinus van expr , wat in radiale is.

exp ( expr )

Die eksponensiële funksie.

int ( expr )

Afkort na heelgetal.

log ( expr )

Die natuurlike logaritm funksie.

rand ()

Wys 'n ewekansige getal tussen 0 en 1.

sonde ( expr )

Wys die sinus van expr , wat in radiale is.

sqrt ( expr )

Die vierkantswortelfunksie.

srand ( [ expr ] )

Gebruik expr as 'n nuwe saad vir die ewekansige getalgenerator. Indien geen expr verskaf word nie, word die tyd van die dag gebruik. Die terugkeerwaarde is die vorige saad vir die ewekansige getalgenerator.

String Funksies

Gawk het die volgende ingeboude snaarfunksies :

asort ( s [ , d ] )

Wys die aantal elemente in die bron skikking s . Die inhoud van s word gesorteer volgens gawk se normale reëls vir die vergelyking van waardes en die indekse van die gesorteerde waardes van s word vervang met opeenvolgende heelgetalle wat met 1 begin. As die opsionele bestemmingsreeks d gespesifiseer word, word s eers in d gedupliseer. , en dan word d gesorteer, sodat die indekse van die bron skikking onveranderd bly.

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

Soek die teikengreep t vir vuurhoutjies van die gewone uitdrukking r . As h 'n string is wat met g of G begin , vervang dan al die vuurhoutjies van r met s . Andersins, h is 'n getal wat aandui watter wedstryd van r moet vervang. As t nie verskaf word nie, word $ 0 eerder gebruik. Binne die vervangingstekst s kan die ry \ n , waar n 'n syfer van 1 tot 9 is, gebruik word om net die teks aan te dui wat ooreenstem met die n 'h geharde subekspressie. Die ry \ 0 verteenwoordig die hele gepaste teks, asook die karakter & . In teenstelling met sub () en gsub () word die gewysigde string as resultaat van die funksie teruggestuur, en die oorspronklike teikengreep word nie verander nie.

gsub ( r , s [ , t ] )

Vir elke substring wat ooreenstem met die gewone uitdrukking r in die tou t , vervang die string s en gee die aantal substitusies terug. As t nie verskaf word nie, gebruik $ 0 . 'N & in die vervangende teks word vervang met die teks wat eintlik pas. Gebruik \ & om 'n letterlike te kry. (Dit moet getik wees as "\\ &" ; sien GAWK: Effektiewe AWK Programmering vir 'n vollediger bespreking van die reëls vir & s en backslashes in die vervangingstekst van sub () , gsub () en gensub () .)

indeks ( s , t )

Wys die indeks van die string t in die string s , of 0 as t nie teenwoordig is nie. (Dit impliseer dat karakterindekse by een begin.)

lengte ( [ s ] )

Wys die lengte van die string s , of die lengte van $ 0 indien s nie verskaf word nie.

pas ( s , r [ , a ] )

Wys die posisie in s waar die gewone uitdrukking r voorkom, of 0 as r nie teenwoordig is nie, en stel die waardes van RSTART en RLENGTH in . Let daarop dat die argumentorde dieselfde is as vir die operateur: strekking . As skikking a verskaf word, word a skoongemaak en dan word elemente 1 tot n gevul met die gedeeltes s wat ooreenstem met die ooreenstemmende verankerde subuitdrukking in r . Die 0ste element van a bevat die gedeelte van s wat ooreenstem met die hele gereelde uitdrukking r .

verdeel ( s , a [ , r ] )

Splits die string s in die skikking a op die gewone uitdrukking r , en gee die aantal velde terug. As r weggelaat word, word FS eerder gebruik. Die skikking a word eers uitgevee. Splitting tree op dieselfde wyse as veldversplintering, soos hierbo beskryf.

sprintf ( fmt , expr-lys )

Druk expr-lys volgens fmt , en gee die resulterende string terug.

strtonum ( str )

Ondersoek str , en gee sy numeriese waarde terug. As str begin met 'n leidende 0 , strtonum () veronderstel dat str 'n oktale getal is. As str begin met 'n leidende 0x of 0X , aanvaar strtonum () dat str 'n heksadesimale getal is.

sub ( r , s [ , t ] )

Net soos gsub () , maar net die eerste ooreenstemmende substring word vervang.

substr ( s , i [ , n ] )

Wys die maksimum n -character substring van s wat by i begin . As n weggelaat word, word die res van s gebruik.

tolower ( str )

Wys 'n kopie van die tou str , met al die hoofletters in str vertaal na hul ooreenstemmende laer-eweknieë. Nie-alfabetiese karakters word onveranderd gelaat.

toupper ( str )

Wys 'n afskrif van die string str , met al die kleinletters in str vertaal na hul ooreenstemmende hoofsaak-eweknieë. Nie-alfabetiese karakters word onveranderd gelaat.

Tydfunksies

Aangesien een van die primêre gebruike van AWK-programme logboeklêers bevat wat tydstempelinligting bevat, bied gawk die volgende funksies vir die verkryging van tydseëls en die formatering daarvan.

mktime ( datespek )

Rurns datespek in 'n tydstempel van dieselfde vorm as wat deur systime () terugbesorg is. Die dataspek is 'n tou van die vorm JJJJ MM DDHH MM SS [DST] . Die inhoud van die tou is ses of sewe getalle wat onderskeidelik die volle jaar insluitend die eeu, die maand van 1 tot 12, die dag van die maand van 1 tot 31, die uur van die dag van 0 tot 23, die minuut van 0 tot 59, en die tweede van 0 tot 60, en 'n opsionele dagbesparende vlag. Die waardes van hierdie getalle hoef nie binne die gespesifiseerde reekse te wees nie; Byvoorbeeld, 'n uur van -1 beteken 1 uur voor middernag. Die oorsprong-nul Gregoriaanse kalender word aanvaar, met jaar 0 voorafgaande jaar 1 en jaar -1 voorafgaande jaar 0. Die tyd word aanvaar dat dit in die plaaslike tydsone is. As die dagligbesparende vlag positief is, word die tyd veronderstel om daglig te wees; indien nul, word die tyd veronderstel om standaard tyd te wees; en as negatief (die verstek), probeer mktime () om vas te stel of dagbesparingstyd vir die gespesifiseerde tyd in werking is. As datespesifikasie nie genoeg elemente bevat nie of as die gevolgde tyd buite bereik is, lewer mktime () op -1.

strftime ( [ formaat [ , tydstempel ]] )

Formate tydstempel volgens die spesifikasie in formaat. Die tydstempel moet van dieselfde vorm wees as deur systime () . As tydstempel ontbreek, word die huidige tyd van die dag gebruik. As die formaat ontbreek, word 'n standaardformaat gelykstaande aan die uitset van datum (1) gebruik. Sien die spesifikasie vir die funksie strftime () in ANSI C vir die formaatomskakelings wat gewaarborg sal word. 'N Public-domain weergawe van strftime (3) en 'n manblad vir dit kom met gawk ; as die weergawe gebruik word om gawk te bou, dan is al die omskakelings wat in die manblad beskryf word, beskikbaar om te gawk.

systime ()

Wys die huidige tyd van die dag as die aantal sekondes sedert die Epoch (1970-01-01 00:00:00 UTC op POSIX-stelsels).

Bit Manipulations Funksies

Begin met weergawe 3.1 van gawk , die volgende bip manipulasie funksies is beskikbaar. Hulle werk deur die omskakeling van dubbele presisie drywingspuntwaardes na ongetekende lang heelgetalle, om die operasie te doen en dan die resultaat om te skakel na die swaaipunt. Die funksies is:

en ( v1 , v2 )

Wys die bitwise EN van die waardes wat deur v1 en v2 verskaf word .

compl ( val )

Wys die bietjie aanvulling van die val .

lshift ( val , telling )

Keer die waarde van val terug , verskuif links deur telbisse.

of ( v1 , v2 )

Wys die bitwise OF van die waardes wat deur v1 en v2 verskaf word .

rshift ( val , telling )

Keer die waarde van val terug , verskuif regs deur telbisse.

xor ( v1 , v2 )

Wys die bietjie XOR van die waardes wat deur v1 en v2 verskaf word .

Internasionalisering Funksies

Begin met weergawe 3.1 van gawk , die volgende funksies kan van u AWK-program gebruik word om strings op run-time te vertaal. Vir volledige besonderhede, sien GAWK: Effektiewe AWK Programmering .

bindtextdomein ( gids [ , domein ] )

Spesifiseer die gids waar gawk soek na die .mo- lêers, indien hulle nie in die `` standaard''-plekke (bv. Tydens toetsing) geplaas kan word of nie. Dit gee die gids terug waar die domein `` gebind '' is. ''

Die verstek domein is die waarde van TEXTDOMAIN . As die gids die nul-string ( "" ) is, sal bindtextdomain () die huidige binding vir die gegewe domein teruggee.

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

Wys die vertaling van die snaar in die teks domein domein vir die plaaslike kategorie kategorie . Die verstekwaarde vir domein is die huidige waarde van TEXTDOMAIN . Die verstekwaarde vir die kategorie is "LC_MESSAGES" .

As u 'n waarde vir kategorie verskaf , moet dit 'n string wees wat gelyk is aan een van die bekende plaaslike kategorieë wat in GAWK beskryf word : Effektiewe AWK-programmering . U moet ook 'n teks domein verskaf. Gebruik TEXTDOMAIN as jy die huidige domein wil gebruik.

dcngettext ( string1 , string2 , nommer [ , domein [ , kategorie ]] )

Wys die meervoudsvorm wat gebruik word vir die getal van die vertaling van string1 en string2 in die teks domein domein vir die plaaslike kategorie kategorie . Die verstekwaarde vir domein is die huidige waarde van TEXTDOMAIN . Die verstekwaarde vir die kategorie is "LC_MESSAGES" .

As u 'n waarde vir kategorie verskaf , moet dit 'n string wees wat gelyk is aan een van die bekende plaaslike kategorieë wat in GAWK beskryf word : Effektiewe AWK-programmering . U moet ook 'n teks domein verskaf. Gebruik TEXTDOMAIN as jy die huidige domein wil gebruik.

GEBRUIKER-DEFINISEERDE FUNKSIES

Funksies in AWK word soos volg gedefinieer:

funksie naam ( parameter lys ) { stellings }

Funksies word uitgevoer wanneer hulle van binne uitdrukkings in patrone of aksies geroep word. Werklike parameters wat in die funksieoproep verskaf word, word gebruik om die formele parameters wat in die funksie verklaar is, te identifiseer. Skikkings word deur verwysing geslaag, ander veranderlikes word volgens waarde verbygesteek.

Aangesien funksies nie oorspronklik deel van die AWK-taal was nie, is die voorsiening vir plaaslike veranderlikes nogal lomp: hulle word as ekstra parameters in die parameterlys verklaar. Die konvensie is om plaaslike veranderlikes van regte parameters te skei deur ekstra spasies in die parameterlys. Byvoorbeeld:

funksie f (p, q, a, b) # a en b is plaaslike (...) / abc / {...; f (1, 2); ...}

Die linkerhakies in 'n funksieoproep is nodig om die funksie naam onmiddellik te volg, sonder enige wit spasie. Dit is om 'n sintaktiese dubbelsinnigheid met die versoeningsoperateur te vermy. Hierdie beperking geld nie vir die ingeboude funksies hierbo gelys nie.

Funksies kan mekaar bel en kan rekursief wees. Funksieparameters wat gebruik word as plaaslike veranderlikes, word geïnitialiseer na die nul-string en die getal nul tydens funksie-aanroeping.

Gebruik retour expr om 'n waarde van 'n funksie terug te gee. Die terugkeerwaarde is ongedefinieerd indien geen waarde verskaf word nie, of as die funksie terugkeer deur die einde af te sluit.

As - lint verskaf is, waarsku gawk oor oproepe na ongedefinieerde funksies op parsietyd, in plaas van op lopietyd . Om 'n onbepaalde funksie by die aanloop tyd te noem, is 'n noodlottige fout.

Die woord func kan in plek van funksie gebruik word .

DYNAMIES BELASTING NUWE FUNKSIES

Begin met weergawe 3.1 van gawk , kan jy dinamies nuwe ingeboude funksies by die loop gawk tolk voeg. Die volledige besonderhede is buite die omvang van hierdie handleiding; sien GAWK: Doeltreffende AWK Programmering vir die besonderhede.

uitbreiding ( voorwerp , funksie )

Koppel die gedeelde objeklêer wat deur voorwerp genoem word, dinamies en skakel die funksie in die voorwerp aan om inisialisering uit te voer. Dit moet beide as snare voorsien word. Wys die waarde wat deur funksie teruggegee word.

Hierdie funksie word verskaf en gedokumenteer in GAWK: Effektiewe AWK-programmering , maar alles oor hierdie kenmerk sal waarskynlik in die volgende weergawe verander. Ons beveel sterk aan dat jy nie hierdie kenmerk gebruik vir enige iets wat jy nie bereid is om te herhaal nie.

SEINE

pgawk aanvaar twee seine. SIGUSR1 veroorsaak dat dit 'n profiel en funksie-oproepstapel na die profiellêer, wat óf awkprof.out is , of watter lêer met die profiele- opsie aangewys is, dump . Dit gaan dan voort om te hardloop. SIGHUP veroorsaak dat dit die profiel en funksie-oproepstapel dump en dan verlaat.

VOORBEELDE

Druk en sorteer die aanmeldnaam van alle gebruikers: BEGIN {FS = ":"} {druk $ 1 | "sorteer"} Tel lyne in 'n lêer: {nlines ++} END {druknye} Voor elke lyn deur sy nommer in die lêer: {druk FNR, $ 0} Gekoppel en lynnommer ('n variasie op 'n tema): {druk NR, $ 0}

internalisering

Stringkonstantes is rye karakters wat in dubbele aanhalings ingesluit is. In nie-Engelssprekende omgewings, is dit moontlik om strings in die AWK-program te merk as om vertaling na die naturelle-natuurlike taal te vereis. Sulke snare word gemerk in die AWK-program met 'n leidende onderstreep (`` _ ''). Byvoorbeeld,

gawk 'BEGIN {druk "hallo, wêreld"}'

druk altyd hallo, wêreld . maar,

gawk 'BEGIN {druk _ "hallo, wêreld"}'

kan bonjour, monde in Frankryk druk.

Daar is verskeie stappe betrokke by die vervaardiging en bestuur van 'n lokaliseerbare AWK-program.

1.

Voeg 'n BEGIN- handeling by om 'n waarde toe te wys aan die TEXTDOMAIN- veranderlike om die teksdomein te stel na 'n naam wat met jou program geassosieer word.


BEGIN {TEXTDOMAIN = "myprog"}

Dit laat gawk toe om die .mo- lêer wat met u program verband hou, te vind. Sonder hierdie stap gebruik gawk die sms-teks domein, wat waarskynlik nie vertalings vir jou program bevat nie.

2.

Merk alle snare wat vertaal moet word met leidende onderskrifte.

3.

Indien nodig, gebruik die dcgettext () en / of bindtextdomain () funksies in u program, soos toepaslik.

4.

Begin gawk --gen-po -f myprog.awk> myprog.po om 'n .po- lêer vir u program te genereer.

5.

Voorsien gepaste vertalings, en bou en installeer 'n ooreenstemmende .mo- lêer.

Die internasionaliseringskenmerke word volledig in GAWK beskryf: Doeltreffende AWK-programmering .

Posix Verenigbaarheid

'N primêre doel vir gawk is verenigbaarheid met die POSIX standaard, sowel as met die nuutste weergawe van UNIX awk . Vir hierdie doel bevat gawk die volgende gebruiker sigbare eienskappe wat nie in die AWK-boek beskryf word nie, maar is deel van die Bell Laboratories-weergawe van awk , en is in die POSIX-standaard.

Die boek dui aan dat die opdrag lyn veranderlike opdrag gebeur wanneer awk anders die argument as 'n lêer sal oopmaak, wat is nadat die BEGIN- blokkie uitgevoer is. In vroeëre implementasies, toe so 'n opdrag voor enige lêernaam verskyn het, sou die opdrag plaasvind voordat die BEGIN- blok uitgevoer word. Aansoeke het afhanklik van hierdie `` funksie ''. Toe awk verander is om sy dokumentasie te pas, is die -v opsie vir die toeken van veranderlikes voor programuitvoering bygevoeg om aansoeke wat afhanklik was van die ou gedrag, te akkommodeer. (Hierdie funksie is ooreengekom deur beide die Bell Laboratories en die GNU-ontwikkelaars.)

Die -W opsie vir implementering spesifieke kenmerke is van die POSIX standaard.

By die verwerking van argumente gebruik gawk die spesiale opsie `` - '' om die einde van die argumente aan te dui. In die verenigbaarheidsmodus waarsku dit maar andersins ignoreer nie-gedefinieerde opsies. In normale werking word sulke argumente aan die AWK-program oorgedra sodat dit verwerk kan word.

Die AWK-boek definieer nie die terugkeerwaarde van srand () nie . Die POSIX-standaard het die saad wat dit gebruik, teruggee, sodat die ewekansige getalreekse bygehou kan word. Daarom gee srand () in gawk ook sy huidige saad terug.

Ander nuwe funksies is: Die gebruik van verskeie -f opsies (van MKS awk ); die ENVIRON- skikking; die \ a , en \ v ontsnapvolgordes (oorspronklik in gawk gedoen en teruggevoer in die Bell Laboratories-weergawe); die tolower () en toupper () ingeboude funksies (van die Bell Laboratories-weergawe); en die ANSI C omskakeling spesifikasies in printf (gedoen eerste in die Bell Laboratories weergawe).

Historiese kenmerke

Daar is twee kenmerke van historiese AWK implementerings wat gawk ondersteun. Eerstens is dit moontlik om die lengte () ingeboude funksie nie net sonder argument te noem nie, maar selfs sonder hakies! so,

a = lengte # Heilige Algol 60, Batman!

is dieselfde as óf van

a = lengte ()
a = lengte ($ 0)

Hierdie kenmerk is gemerk as `` verouderde '' in die POSIX-standaard en gawk gee 'n waarskuwing oor die gebruik daarvan as - lint op die opdragreël gespesifiseer word.

Die ander kenmerk is die gebruik van óf die voortgesette of die breekstellings buite die liggaam van 'n rukkie , vir , of doen lus. Tradisionele AWK-implementasies het sodanige gebruik as ekwivalent aan die volgende stelling behandel. Gawk ondersteun hierdie gebruik as - tradisioneel gespesifiseer is.

GNU Uitbreidings

Gawk het 'n aantal uitbreidings aan POSIX awk . Hulle word in hierdie afdeling beskryf. Al die uitbreidings wat hier beskryf word, kan gedeaktiveer word deur oproep te doen met die - tradisionele opsie.

Die volgende kenmerke van gawk is nie beskikbaar in POSIX awk nie .

*

Geen padsoektog word uitgevoer vir lêers genaamd via die -f opsie nie. Daarom is die AWKPATH omgewing veranderlike nie spesiaal nie.

*

Die \ x ontsnapvolgorde. (Gestremd met --posix .)

*

Die fflush () funksie. (Gestremd met --posix .)

*

Die vermoë om lyne na te gaan ? en :. (Gestremd met --posix .)

*

Octal en heksadesimale konstantes in AWK-programme.

*

Die ARGIND , BINMODE , ERRNO , LINT , RT en TEXTDOMAIN veranderlikes is nie spesiaal nie.

*

Die IGNORECASE- veranderlike en sy newe-effekte is nie beskikbaar nie.

*

Die FIELDWIDTHS veranderlike en vaste wydte veld splitsing.

*

Die PROCINFO- skikking is nie beskikbaar nie.

*

Die gebruik van RS as 'n gereelde uitdrukking.

*

Die spesiale lêernaam wat beskikbaar is vir I / O-omskakeling, word nie erken nie.

*

Die | & operateur vir die skep van ko-prosesse.

*

Die vermoë om individuele karakters te verdeel met die nul-string as die waarde van FS , en as die derde argument om te verdeel () .

*

Die opsionele tweede argument vir die close () funksie.

*

Die opsionele derde argument vir die wedstryd () funksie.

*

Die vermoë om posisionele spesifiseerders te gebruik met printf en sprintf () .

*

Die gebruik van skrap skikking om die hele inhoud van 'n skikking te verwyder.

*

Die gebruik van die volgende lêer om die verwerking van die huidige insetlêer te verlaat.

*

Die en () , asort () , bindtextdomein () , compl () , dcgettext () , gensub () , lshift () , mktime () , of () , rshift () , strftime () , strtonum () en xor () funksies.

*

Lokaliseerbare snare.

*

Voeg nuwe ingeboude funksies dinamies by met die uitbreiding () funksie.

Die AWK-boek definieer nie die terugkeerwaarde van die close () funksie. Gawk se naby () gee die waarde van fclose (3), of pclose (3), wanneer 'n uitsetlêer of pyp afsluit. Dit gee die uitgangspunt van die proses wanneer 'n insetpyp gesluit word. Die terugkeerwaarde is -1 indien die naam van die lêer, pyp of mede-proses nie met 'n omruiling geopen is nie.

Wanneer gawk met die - tradisionele opsie aangevoer word, as die fs- argument vir die -F opsie `` t '' is, dan is FS ingestel op die oortjie karakter. Let daarop dat tik gawk -F \ t ... eenvoudig veroorsaak dat die dop die `` t '' 'aanhaal en nie `` \ t' 'na die -F opsie slaag nie. Aangesien dit 'n bietjie lelike spesiale geval is, is dit nie die standaardgedrag nie. Hierdie gedrag vind ook nie plaas as --posix gespesifiseer is nie. Om 'n tab karakter as die veld skeiding te kry, is dit die beste om enkele aanhalingstekens te gebruik: gawk -F '\ t' ....

Sien ander opdragte : wag , lp , voltooi , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , outofs , praat , motd , gratis , lpr , execl , fdisk , by , wie , iwconfig , ifconfig , vddplay , open , lsmod , ntohs , mailq , kill , wtmp