Skip to main content

Gawk - Linux Command - Unix Command

How To Find The Copyright Symbol On The Keyboard (Juni 2026)

How To Find The Copyright Symbol On The Keyboard (Juni 2026)
Anonim

namn

gawk - mönsterskanning och bearbetningsspråk

Synopsis

gawk POSIX eller GNU-stilalternativ -f programfilen -- fil …gawk POSIX eller GNU-stilalternativ -- program text fil …

pgawk POSIX eller GNU-stilalternativ -f programfilen -- fil …pgawk POSIX eller GNU-stilalternativ -- program text fil …

Beskrivning

gawk är GNU-projektets genomförande av AWK-programmeringsspråket. Det överensstämmer med definitionen av språket i POSIX 1003.2 Command Language and Utilities Standard. Denna version är i sin tur baserad på beskrivningen i AWK-programmeringsspråket , av Aho, Kernighan och Weinberger, med de ytterligare funktionerna som finns i System V Release 4 versionen av UNIX awk . gawk tillhandahåller även senare Bell Laboratories awk tillägg och ett antal GNU-specifika tillägg.

Pgawk är den profilerande versionen av gawk . Det är identiskt på alla sätt till gawk , förutom att programmen körs långsammare, och det skapar automatiskt en körprofil i filen awkprof.out när det är klart. Se --profil alternativ nedan.

Kommandoraden består av alternativ till gawk själv, AWK-programtexten (om den inte levereras via -f eller --fil alternativ) och värden som ska göras tillgängliga i ARGC och argv fördefinierade AWK-variabler.

Alternativformat

gawk alternativ kan vara antingen traditionella POSIX-bokstäver alternativ eller långa alternativ i GNU-stil. POSIX-alternativen börjar med en enda `` - '', medan långa alternativ börjar med `` - ''. Långa alternativ finns för både GNU-specifika funktioner och för POSIX-mandatfunktioner.

Efter POSIX-standarden, gawk -specifika alternativ levereras via argument till -W alternativ. Flera olika -W alternativ kan tillhandahållas vardera -W alternativet har ett motsvarande långt alternativ, som beskrivs nedan. Argument till långa alternativ är antingen förenade med alternativet av en = signera, utan mellanliggande utrymmen, eller de kan tillhandahållas i nästa kommandoradsargument. Långa alternativ kan förkortas, så länge förkortningen förblir unik.

alternativ

gawk accepterar följande alternativ, listade alfabetiskt.

-F fs

--field-separator fs Använda sig av fs för inmatningsfältavskiljaren (värdet av FS fördefinierad variabel).

-v var = val

--tilldela var = val Tilldel värdet val till variabeln var , innan körning av programmet börjar. Sådana variabla värden är tillgängliga för BÖRJA block av ett AWK-program.

-f programfilen

--fil programfilen Läs AWK-programkällan från filen programfilen , i stället för från det första kommandoradsargumentet. Flera olika -f (eller --fil) alternativ kan användas.

-MF NNN

-herr NNN Ange olika minnesgränser till värdet NNN . De f flaggan anger det maximala antalet fält och r flagga anger maximal rekordstorlek. Dessa två flaggor och -m alternativet är från Bell Laboratories forskningsversion av UNIX awk . De ignoreras av gawk , eftersom gawk har inga fördefinierade gränser.

-W-kompatibel

-W traditionell

--compat

--traditionell Springa in kompatibilitet läge. I kompatibilitetsläge, gawk beter sig identiskt med UNIX awk ; ingen av de GNU-specifika tilläggen är erkända. Användningen av --traditionell föredras framför de andra formerna av detta alternativ. Se GNU EXTENSIONS, nedan, för mer information.

-W copyleft

-W copyright

--copyleft

--upphovsrätt Skriv ut den korta versionen av GNU-upphovsrättsinformationen på standardutmatningen och avsluta med framgång.

-W dump-variabler= fil

--dump-variabler= fil Skriv ut en sorterad lista över globala variabler, deras typer och slutliga värden till fil . Om inte fil tillhandahålls, gawk använder en fil som heter awkvars.out i den aktuella katalogen.

Att ha en lista över alla globala variabler är ett bra sätt att leta efter typfel i dina program. Du skulle också använda det här alternativet om du har ett stort program med många funktioner och du vill vara säker på att dina funktioner inte uteslutande använder globala variabler som du menade vara lokala. (Detta är ett särskilt lätt misstag att göra med enkla variabla namn som jag, j, och så vidare.)

-W hjälp

-W användning

--hjälp

--användande Skriv ut en relativt kort sammanfattning av de tillgängliga alternativen på standardutgången. (Per GNU-kodningsstandarder , dessa alternativ ger en omedelbar och lyckad exit.)

-W lint= dödlig

--lint= dödlig Varna för konstruktioner som är tveksamma eller ej bärbara för andraAWK-implementeringar. Med ett valfritt argument av dödlig, lint varningar blir dödliga fel. Detta kan vara drastiskt, men användningen kommer säkerligen att uppmuntra utvecklingen av renare AWK-program.

-W lint-old

--lint-gammal Ge varningar om konstruktioner som inte är portabla till den ursprungliga versionen av Unix awk .

-W gen-po

--gen-po Skanna och analysera AWK-programmet och generera en GNU .po formatfilen på standardutgåva med poster för alla lokaliserbara strängar i programmet. Programmet själv är inte exekverat. Se GNU gettext distribution för mer information om .po filer.

-W icke-decimal-data

--non-decimal-data som Erkänna oktala och hexadecimala värden i inmatningsdata. Använd detta alternativ med stor försiktighet!

-W posix

--posix Detta tänds kompatibilitet läge med följande ytterligare begränsningar:

*

x Escape-sekvenser är inte igenkända.

*

Endast mellanslag och flik fungerar som fältavskiljare när FS är inställd på ett enda utrymme, newline gör det inte.

*

Du kan inte fortsätta raderna efter ? och :.

*

Synonymen func för sökordet fungera känns inte igen.

*

Operatörerna ** och **= kan inte användas i stället för ^ och ^=.

*

De fflush () funktionen är inte tillgänglig.

-W-profilen= prof_file

--profil= prof_file Skicka profileringsdata till prof_file . Standard är awkprof.out. När kör med gawk , profilen är bara en `` pretty printed''version av programmet. När kör med pgawk , innehåller profilen exekveringstalet för varje uttalande i programmet i vänster marginal och funktionssamtal för varje användardefinierad funktion.

-W återintervall

--re-intervall Aktivera användningen av intervalluttryck i regelbunden expressions matchning (se Vanliga uttryck, Nedan). Intervalluttryck var inte traditionellt tillgängliga på AWK-språket. POSIX-standarden lade dem till, för att göra awk och egrep överensstämmer med varandra. Men deras användning kommer sannolikt att bryta gamla AWK-program, så gawk ger dem endast om de begärs med det här alternativet eller när --posix är specificerad.

-W-källan program text

--källa program text Använda sig av program text som AWK-programkällkod. Detta alternativ gör det enkelt att blanda bibliotekets funktioner (används via -f och --fil alternativ) med källkod som anges på kommandoraden. Den är främst avsedd för medelstora till stora AWK-program som används i skalskript.

-W-versionen

--version Skriv ut versionsinformation för den här kopian av gawk på standardutgången. Detta är användbart huvudsakligen för att veta om den nuvarande kopian av gawk På ditt system är uppdaterat med hänsyn till vad Fri Software Foundation distribuerar. Detta är också användbart vid rapportering av fel. (Per GNU-kodningsstandarder , dessa alternativ ger en omedelbar och lyckad exit.)

-- Signal slutet på alternativen. Detta är användbart för att tillåta ytterligare argument till AWK-programmet själv att börja med en `` - ''. Detta är främst för konsekvens med argumentet för analysparsing som används av de flesta andra POSIX-program.

I kompatibilitetsläget flaggas alla andra alternativ som ogiltiga, men ignoreras annars. Under normal drift, så länge som programtext har levererats, skickas okända alternativ till AWK-programmet i argv array för bearbetning. Detta är särskilt användbart för att köra AWK-program via `` #! '' Körbar tolkmekanism.

AWK PROGRAM UTFÖRING

Ett AWK-program består av en sekvens av mönsterhandlingar och valfria funktionsdefinitioner.

mönster { handling uttalanden }fungera namn ( parameterlista ) { uttalanden }

gawk läser först programkällan från programfilen (s) om specificerat, från argument till --källa, eller från det första icke-alternativet argumentet på kommandoraden. De -f och --källa Alternativ kan användas flera gånger på kommandoraden. gawk läser programtexten som om alla programfilen s och kommandorads källtext hade sammanlänkats. Detta är användbart för att bygga bibliotek av AWK-funktioner, utan att behöva inkludera dem i varje nytt AWK-program som använder dem. Det ger också möjlighet att blanda biblioteksfunktioner med kommandoradsprogram.

Miljövariabeln AWKPATH specificerar en sökväg som ska användas när du hittar källfiler som heter med -f alternativ. Om denna variabel inte existerar är standardvägen"/ Usr / local / share / awk". (Den faktiska katalogen kan variera beroende på hur gawk byggdes och installerades.) Om ett filnamn ges till -f alternativet innehåller ett `` / '' tecken, ingen sökväg utförs.

gawk utför AWK-program i följande ordning. Först alla variabla uppdrag som anges via -v alternativet utförs. Nästa, gawk sammanställer programmet i en intern form. Sedan, gawk exekverar koden i BÖRJA block (er) (om någon), och fortsätter sedan att läsa varje fil som heter i argv array. Om det inte finns några filer som heter på kommandoraden, gawk läser standardinmatningen.

Om ett filnamn på kommandoraden har formuläret var = val det behandlas som en variabel uppgift. Variabeln var kommer att tilldelas värdet val . (Detta händer efter något BÖRJA block (er) har körts.) Kommandoradsvariabel uppgift är mest användbart för att dynamiskt tilldela värden till variablerna AWK använder för att styra hur ingången bryts in i fält och poster. Det är också användbart för att kontrollera tillstånd om flera pass behövs över en enda datafil.

Om värdet av ett visst element i argv är tom (''), gawk hoppar över det.

För varje post i inmatningen, gawk test för att se om det matchar någon mönster i AWK-programmet. För varje mönster som posten matchar, den associerade verkan exekveras. Mönstren testas i den ordning de förekommer i programmet.

Slutligen, efter allt ingången är uttömd, gawk exekverar koden i SLUTET block (er) (om någon).

Variabler, poster och fält

AWK-variabler är dynamiska; de uppstår när de används första gången. Deras värden är antingen flytande punkter eller strängar, eller båda, beroende på hur de används. AWK har också endimensionell arrays; Arrays med flera dimensioner kan simuleras. Flera fördefinierade variabler ställs in som ett program körs; Dessa kommer att beskrivas som behövs och sammanfattas nedan.

Uppgifter

Vanligtvis separeras skivorna med nya karaktärer. Du kan styra hur poster separeras genom att tilldela värden till den inbyggda variabeln RS. Om RS är en enda karaktär, den karaktären skiljer poster. Annat, RS är ett vanligt uttryck. Text i inmatningen som matchar det här reguljära uttrycket skiljer posten. I kompatibilitetsläge används dock endast den första tecknen av dess strängvärde för att separera poster. Om RS är inställd på nollsträngen, då poster separeras av tomma linjer. När RS är inställd på nollsträngen, fungerar den nya linjens karaktär alltid som en fältseparator, förutom vad som helst värde FS kan ha.

Fields

När varje inmatningsrekord läses, gawk delar upp rekordet i fält , med värdet av FS variabel som fältavskiljare. Om FS är en enda karaktär, fälten är åtskilda av det tecknet. Om FS är nollsträngen, då blir varje enskilt tecken ett separat fält. Annat, FS förväntas vara ett fullständigt regelbundet uttryck. I det speciella fallet som FS är ett enda utrymme, fält separeras av körningar av mellanslag och / eller flikar och / eller nya linjer. (Men se diskussionen om --posix, Nedan). NOTERA: Värdet av IGNORERA FALL (se nedan) påverkar också hur fält delas upp när FS är ett vanligt uttryck, och hur poster separeras när RS är ett vanligt uttryck.

Om FIELDWIDTHS variabel är inställd på en mellanseparerad lista med siffror, förväntas varje fält ha en fast bredd och gawk delar upp inspelningen med angivna bredder. Värdet av FS ignoreras. Tilldela ett nytt värde till FS överstyrer användningen av FIELDWIDTHS, och återställer standardbeteendet.

Varje fält i inmatningsrekordet kan refereras av sin position, $1, $2, och så vidare. $0 är hela posten. Fält behöver inte refereras av konstanter:

n = 5skriv ut $ n

skriver ut det femte fältet i inmatningsrekordet.

Variabeln NF är inställt på det totala antalet fält i inmatningsrekordet.

Referenser till obefintliga fält (dvs fält efter $ NF) producerar nollsträngen. Men tilldelning till ett obefintligt fält (t ex $ (NF + 2) = 5) ökar värdet på NF, skapar några mellanliggande fält med nollsträngen som deras värde och orsakar värdet av $0 att omräknas, med fälten separerade med värdet av OFS. Hänvisningar till negativa numrerade fält orsakar ett dödligt fel. nedräkning NF orsakar värdena för fält förbi det nya värdet som ska förloras och värdet av $0 att omräknas, med fälten separerade med värdet av OFS.

Genom att tilldela ett värde till ett befintligt fält får hela posten byggas om när $0 är refererad. På samma sätt tilldelar ett värde till $0 får rekordet att splittras, skapa nya värden för fälten.

Inbyggda variabler

gawk Inbyggda variabler är:

ARGC

Antal kommandoradsargument (innehåller inte alternativ till gawk , eller programkällan).

ARGIND

Indexet i argv av den aktuella filen som behandlas.

argv

Array av kommandoradsargument. Arrayen är indexerad från 0 till ARGC - 1. Dynamiskt ändra innehållet i argv kan styra filerna som används för data.

BINMODE

På icke-POSIX-system specificeras användningen av `` binärt '' läge för all fil I / O. Numeriska värden på 1, 2 eller 3 anger att inmatningsfiler, utdatafiler eller alla filer ska använda binär I / O. Strängvärden för "R", eller "W" Ange att inmatningsfiler respektive respektive outputfiler ska använda binärt I / O. Strängvärden för "Rw" eller "Wr" Ange att alla filer ska använda binär I / O. Alla andra strängvärden behandlas som "Rw", men genererar ett varningsmeddelande.

CONVFMT

Omvandlingsformatet för nummer, "% .6g", som standard.

OMSLUTA

En matris som innehåller värdena för den aktuella miljön. Arrayen indexeras av miljövariablerna, varvid varje element är värdet av den variabeln (t.ex.ENVIRON "HOME" skulle kunna vara / Home / Arnold). Att ändra denna array påverkar inte miljön som ses av program som gawk springer via omdirigering eller systemet()fungera.

Felkod

Om ett systemfel uppstår antingen görs en omdirigering för getline, under en läs för getline, eller under a stänga()Felkod kommer att innehålla en sträng som beskriver felet. Värdet är föremål för översättning i icke-engelska språk.

FIELDWIDTHS

En white-space separerad lista över fältbredder. När den är inställd, gawk analyserar ingången till fält med fast bredd, istället för att använda värdet av FS variabel som fältavskiljare.

FILNAMN

Namnet på den aktuella inmatningsfilen.Om inga filer anges på kommandoraden, värdet av FILNAMN är `` - ''. Dock, FILNAMN är odefinierad inuti BÖRJA blockera (om inte anges av getline).

FNR

Inmatningsrekordnumret i den aktuella inmatningsfilen.

FS

Inmatningsfältet separator, ett utrymme som standard. Se Fieldsovan.

IGNORERA FALL

Kontrollerar fallkänsligheten för alla vanliga uttryck och strängoperationer. Om IGNORERA FALL har ett icke-nollvärde, sedan sträng jämförelser och mönster matchning i regler, fält splittring med FS, posten separerar med RS, regelbundet uttryck matchande med ~och !~, och den gensub (), gsub (), index(), match(), dela(), och sub() Inbyggda funktioner alla ignorerar fallet när du gör ordinarie uttrycksoperationer. NOTERA: Array-prenumeration är inte påverkas, inte heller är det en sort() fungera.

Således, om IGNORERA FALL är inte lika med noll, / Ab / matchar alla strängar "Ab", "AB","Ab", och "AB". Som med alla AWK-variabler, är det ursprungliga värdet av IGNORERA FALL är noll, så är alla vanliga uttryck och strängoperationer normalt skiftlägeskänsliga. Under Unix används den fullständiga ISO 8859-1 Latin-1 teckenuppsättningen när man ignorerar fallet.

MOLL

Ger dynamisk kontroll av --lint alternativet från ett AWK-program. När det är sant, gawk skriver ut lintvarningar. När det är falskt gör det inte. När tilldelats strängvärdet "dödlig", lint varningar blir dödliga fel, precis som --lint = dödlig. Något annat sant värde skriver bara varningar.

NF

Antalet fält i den aktuella inmatningsrekordet.

NR

Det totala antalet inmatningsrekord som hittills hittats.

OFMT

Utgångsformatet för nummer, "% .6g", som standard.

OFS

Utmatningsfältet separator, ett utrymme som standard.

ORS

Utmatningsrekordseparatorn, som standard en ny linje.

procinfo

Elementen i denna array ger tillgång till information om det pågående AWK-programmet. På vissa system kan det finnas element i arrayen, "grupp 1" genom "grupp n ' för vissa n , vilket är antalet kompletterande grupper som processen har. Använd i operatör för att testa för dessa element. Följande delar garanteras vara tillgängliga:

Procinfo "egid"

värdet av getegid (2) systemsamtal.

Procinfo "euid"

värdet av geteuid (2) systemsamtal.

Procinfo "FS"

"FS" om fältet splittras med FS är i kraft, eller "FIELDWIDTHS" om fältet splittras med FIELDWIDTHS är i kraft.

Procinfo "gid"

värdet av getgid (2) systemsamtal.

Procinfo "pgrpid"

processgrupps-ID för den nuvarande processen.

Procinfo "pid"

Process ID för den aktuella processen.

Procinfo "ppid"

moderprocess ID för den aktuella processen.

Procinfo "uid"

värdet av getuid (2) systemsamtal.

RS

Inmatningsregisterseparatorn, som standard en ny linje.

RT

Plattformen. gawk uppsättningar RT till den inmatade texten som matchade tecknet eller det reguljära uttrycket som anges av RS.

RSTART

Indexet för det första tecknet matchas av match(); 0 om ingen matchning. (Detta innebär att teckenindex börjar vid en.)

RLENGTH

Strängens längd matchas av match(); -1 om ingen matchning.

SUBSEP

Tecknet som används för att separera flera abonnemang i arrayelement, som standard ' 034'.

TEXTDOMÄN

Textdomänen för AWK-programmet; brukade hitta de lokala översättningarna för programmets strängar.

arrayer

Arrays är prenumererade med ett uttryck mellan ruta parenteser ( och ). Om uttrycket är en uttryckslista ( expr , expr …) är array subscripten en sträng som består av sammanbindningen av (sträng) -värdet för varje uttryck, separerat av värdet av SUBSEP variabel. Denna funktion används för att simulera multiplicerade dimensionerad array. Till exempel:

i = "A"; j = "B"; k = "C"x jag, j, k = "hej, världen n"

tilldelar strängen "hej, världen n" till elementet i matrisen x som är indexerad av strängen"A 034B 034C". Alla arrays i AWK är associativa, dvs indexerade av strängvärden.

Specialoperatören i kan användas i en om eller medan uttalande för att se om en array har ett index som består av ett visst värde.

om (val i array) print array val

Om arrayen har flera prenumerationer, använd (i, j) i array.

De i konstruktion kan också användas i a för loop för att iterera över alla element i en array.

Ett element kan raderas från en array med hjälp av radera påstående. De radera uttalande kan också användas för att radera hela innehållet i en array, bara genom att ange array-namnet utan ett prenumeration.

Variabel Typning Och Konvertering

Variabler och fält kan vara (flytande punkt) nummer, eller strängar, eller båda. Hur värdet av en variabel tolkas beror på dess sammanhang. Om den används i ett numeriskt uttryck, kommer det att behandlas som ett tal, om det används som en sträng behandlas det som en sträng.

För att tvinga en variabel att behandlas som ett tal, lägg till 0 till det; att tvinga den att behandlas som en sträng, sammanfoga den med nollsträngen.

När en sträng måste konverteras till ett tal, uppnås omvandlingen med strtod (3). Ett tal konverteras till en sträng med värdet av CONVFMT som en formatsträng för sprintf (3), med variabelns numeriska värde som argumentet. Men även om alla tal i AWK är flytande punkt, är integrerade värden alltid konverteras som heltal. Således ges

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

variabeln b har ett strängvärde på '12' och inte '12.00'.

gawk utför jämförelser enligt följande: Om två variabler är numeriska jämförs de numeriskt. Om ett värde är numeriskt och det andra har ett strängvärde som är en `` numerisk sträng '' ', görs även jämförelser numeriskt. I annat fall omvandlas det numeriska värdet till en sträng och en sträng jämförelse utförs. Två strängar jämförs naturligtvis som strängar. Observera att POSIX-standarden tillämpar begreppet `` numerisk sträng '' överallt, även till strängkonstanter. Detta är dock klart felaktigt, och gawk gör inte detta. (Lyckligtvis fixas det i nästa version av standarden.)

Observera att strängkonstanter, t.ex. '57', är inte numeriska strängar, de är strängkonstanter. Idén om `` numerisk sträng '' gäller bara fält, getline inmatning, FILNAMN, argv element, OMSLUTA element och element i en array skapad av dela() det är numeriska strängar. Grundidén är det användarinmatning , och endast användarinmatning, som ser numerisk ut, bör behandlas så.

Uninitialiserade variabler har numeriskt värde 0 och strängvärdet "" (null eller tom sträng).

Octal och hexadecimal konstanter

Börjar med version 3.1 av gawk, Du kan använda C-stil oktal- och hexadecimala konstanter i din AWK-programkälla. Till exempel, det oktala värdet 011 är lika med decimal 9, och det hexadecimala värdet 0x11 är lika med decimal 17.

Strängkonstanter

Strängkonstanter i AWK är sekvenser av tecken som bifogas dubbla citat ('). Inom strängar, vissa flyktsekvenser är erkända, som i C. Dessa är:

\

En bokstavlig backslash.

en

Den "varning" karaktären; vanligtvis ASCII BEL-tecknet.

b

backsteg.

f

formen-flöde.

n

ny linje.

r

vagnretur.

t

horisontell flik.

v

vertikal flik.

x hex siffror

Tecknet representerat av strängen av hexadecimala siffror efter x. Som i ANSIC anses alla följande hexadecimala siffror vara en del av flyktsekvensen. (Den här funktionen bör berätta något om språkdesign av utskottet.) T.ex. " X1B" är ASCIIESC (escape) karaktären.

ddd

Teckenet representeras av 1-, 2- eller 3-siffriga sekvensen av oktala siffror. T.ex., ' 033' är ASCII ESC (escape) tecken.

c

Den bokstavliga karaktären c .

Escape-sekvenserna kan också användas inom konstanta reguljära uttryck (t.ex./ t f n r v / matchar vitbokssymboler).

I kompatibilitetsläget behandlas de tecken som representeras av oktala och hexadecimala flyktsekvenser bokstavligen när de används i reguljära uttryckskonstanter. Således, / A 52b / är ekvivalent med/ A * b /.

Mönster och åtgärder

AWK är ett linjeorienterat språk. Mönstret kommer först och sedan åtgärden. Handlingsutlåtanden bifogas { och }. Antingen kan mönstret saknas, eller åtgärden kan saknas, men förstås inte båda. Om mönstret saknas utförs åtgärden för varje enskild post av inmatningen. En saknad åtgärd motsvarar

{print}

som skriver ut hela posten.

Kommentarer börjar med `` # '' tecknet, och fortsätt till slutet av raden. Blanka linjer kan användas för att skilja uttalanden. Normalt slutar ett uttalande med en newline, men det här är inte fallet för linjer som slutar i en ``, '' {, ?, :, &&, eller ||. Linjer som slutar do eller annan har också sina uttalanden fortsatte automatiskt på följande rad. I andra fall kan en linje fortsättas genom att avsluta den med en ', i vilket fall den nya linjen kommer att ignoreras.

Flera uttalanden kan läggas på en rad genom att skilja dem med en ``; ''. Detta gäller både deklarationerna inom handlingsdelen av ett mönsterhandlingspar (det vanliga fallet) och själva mönsterhandlingsförklaringarna.

Mönster

AWK-mönster kan vara ett av följande:

BÖRJA SLUTET / vanligt uttryck / relationellt uttryck mönster && mönster mönster || mönster mönster ? mönster : mönster ( mönster ) ! mönster pattern1 , pattern2

BÖRJA och SLUTET är två speciella sorters mönster som inte testas mot ingången. Handlingsdelarna av alla BÖRJA mönster sammanfogas som om alla påståenden hade skrivits i en enda BÖRJA blockera. De körs innan någon av inmatningen läses. På samma sätt, alla SLUTET block sammanfogas och exekveras när all ingång är uttömd (eller när en utgång uttalandet utförs). BÖRJA och SLUTET mönster kan inte kombineras med andra mönster i mönsteruttryck. BÖRJA och SLUTET mönster kan inte ha saknade åtgärdsdelar.

För / vanligt uttryck / mönster, är det associerade uttalandet exekverat för varje inmatningsrekord som matchar det reguljära uttrycket. Regelbundna uttryck är samma som de i egrep (1), och sammanfattas nedan.

en relationellt uttryck kan använda någon av operatörerna som definieras nedan i avsnittet om åtgärder. Dessa testar i allmänhet om vissa fält matchar vissa reguljära uttryck.

De &&, ||, och ! operatörer är logiska OCH, logiska ELLER, och logiska INTE, respektive som i C. De gör kortslutningsutvärdering, även som i C, och används för att kombinera mer primitiva mönsteruttryck. Som på de flesta språk kan parentes användas för att ändra utvärderingsordningen.

De ?: Operatören är som samma operatör i C. Om det första mönstret är sant är mönstret som används för testning det andra mönstret, annars är det det tredje. Endast ett av det andra och det tredje mönstret utvärderas.

De pattern1 , pattern2 form av ett uttryck kallas a intervallmönster . Den matchar alla inmatningsfiler som börjar med en post som matchar pattern1 , och fortsätter till en rekord som matchar pattern2 , inklusive. Den kombinerar inte med någon annan typ av mönsteruttryck.

Vanliga uttryck

Regelbundna uttryck är den utökade typen som finns i egrep . De består av tecken enligt följande:

c

matchar icke-metakarakteren c .

c

matchar den bokstavliga karaktären c .

.

matchar alla tecken Inklusive ny linje.

^

matchar början av en sträng.

$

matchar slutet av en sträng.

abc…

teckenlista, matchar någon av tecknen abc… .

^ abc…

negerad teckenlista, matchar alla tecken förutom abc… .

r1 | r2

växling: matchar heller r1 eller r2 .

R1R2

sammanlänkning: matchningar r1 , och då r2 .

r +

matchar en eller flera r 'S.

r *

matchar noll eller mer r 'S.

r ?

matchar noll eller en r 'S.

( r )

gruppering: matchningar r .

r { n }

r { n ,}

r { n , m } Ett eller två siffror inuti spännbågar betecknar en intervalluttryck . Om det finns ett tal i axlarna, föregående regeluttryck r upprepas n gånger. Om det finns två siffror åtskilda av ett komma, r upprepas n till m gånger. Om det finns ett tal följt av ett komma, då r upprepas åtminstone n gånger.

Intervalluttryck är endast tillgängliga om antingen --posix eller --re-intervall anges på kommandoraden.

y

matchar den tomma strängen i början eller slutet av ett ord.

B

matchar den tomma strängen inom ett ord.

<

matchar den tomma strängen i början av ett ord.

>

matchar den tomma strängen i slutet av ett ord.

w

matchar valfri ordkomponent (bokstav, siffra eller understreck).

W

matchar alla tecken som inte är ordbeständiga.

`

matchar den tomma strängen i början av en buffert (sträng).

'

matchar den tomma strängen i slutet av en buffert.

Escape-sekvenserna som är giltiga i strängkonstanter (se nedan) gäller även i reguljära uttryck.

Teckenklasser är en ny funktion som introduceras i POSIX-standarden. En teckenklass är en speciell notering för att beskriva listor med tecken som har ett specifikt attribut, men där själva tecknen kan variera från land till land och / eller från teckenuppsättning till teckenuppsättning. Exempelvis skiljer sig begreppet som är ett alfabetiskt tecken i USA och Frankrike.

En teckenklass är endast giltig i ett reguljärt uttryck inuti fästena i en teckenlista. Karaktärsklasser består av :, ett nyckelord som anger klassen och :. Karaktärklasserna enligt POSIX-standarden är:

: Alnum:

Alfanumeriska tecken.

:alfa:

Alfabetiska tecken.

:tom:

Mellanslag eller fliktecken.

: Cntrl:

Styr tecken.

:siffra:

Numeriska tecken.

:Graf:

Tecken som är både utskrivbara och synliga. (Ett utrymme kan skrivas ut, men inte synligt, medan en en är båda.)

:lägre:

Lägre bokstavs alfabetiska tecken.

:skriva ut:

Skrivbara tecken (tecken som inte är kontrolltecken.)

: Punct:

Punkteringstecken (tecken som inte är bokstav, siffror, kontrolltecken eller mellanslagstecken).

:rymden:

Mellanslag tecken (som utrymme, flik och formmatning, för att nämna några).

:övre:

Överordnade alfabetiska tecken.

: Xdigit:

Tecken som är hexadecimala siffror.

Till exempel, före POSIX-standarden, för att matcha alfanumeriska tecken, skulle du ha skrivit / A-Za-z0-9 /. Om din teckenuppsättning hade andra alfabetiska tecken i den, skulle det inte matcha dem, och om din teckenuppsättning sammansatt annorlunda från ASCII kanske detta inte ens matchar ASCII alfanumeriska tecken. Med POSIX-teckenklasserna kan du skriva/ : Alnum: /, och detta matchar de alfabetiska och numeriska tecknen i din teckenuppsättning.

Två extra speciella sekvenser kan visas i teckenlistor. Dessa gäller för teckenuppsättningar utan ASCII, som kan ha enstaka symboler (kallas samlingselement ) som representeras med mer än ett tecken, samt flera tecken som motsvarar kollationera , eller sortering, syften. (T.ex. på franska är en vanlig `` e '' och en grav-accenterad e` ekvivalent.)

Sortera symboler

En kollationssymbol är ett flertals-karaktärselement som bifogas . och .. Till exempel, om ch är ett samlingselement då .Ch. är ett vanligt uttryck som matchar det här samlingselementet, medan Ch är ett vanligt uttryck som matchar heller c eller h.

Ekvivalens klasser

En ekvivalens klass är ett lokalspecifikt namn för en lista med tecken som är likvärdiga. Namnet är bifogat i = och =. Till exempel namnet e kan användas för att representera alla `` e ', `` `e', '' och` `e`. '' I det här fallet, = E = är ett vanligt uttryck som matchar någon av e, e', eller E`.

Dessa funktioner är mycket värdefulla i icke-engelsktalande språk. Biblioteket fungerar som gawk Användningar för regelbunden expression matchning identifierar för närvarande bara POSIX karaktärklasser; De känner inte igen sorteringssymboler eller ekvivalensklasser.

De y, B, <, >, w, W, `, och ' operatörer är specifika för gawk ; De är förlängningar baserade på faciliteter i GNUs reguljära uttrycksbibliotek.

De olika kommandoradsalternativen styr hur gawk tolkar tecken i reguljära uttryck.

Inga alternativ

I standardfallet gawk tillhandahålla alla faciliteter för POSIX-reguljära uttryck och de reguljära uttrycksoperatörerna för TheGNU som beskrivs ovan. Intervalluttryck stöds emellertid inte.

--posix

Endast POSIX-reguljära uttryck stöds, GNU-operatörerna är inte speciella. (T.ex., w matchar en bokstavlig w). Intervalluttryck är tillåtna.

--traditionell

Traditionell Unix awk Vanliga uttryck matchas. GNU-operatörerna är inte speciella, intervalluttryck är inte tillgängliga, och inte heller POSIX-teckenklasserna (: Alnum: och så vidare). Tecken som beskrivs av oktala och hexadecimala flyktsekvenser behandlas bokstavligt, även om de representerar metakaraktier med vanligt uttryck.

--re-intervall

Tillåt intervalluttryck i reguljära uttryck, även om --traditionell har tillhandahållits.

Åtgärder

Handlingsutlåtanden är bifogade i hängslen, { och }. Åtgärdsförklaringar består av de vanliga uppdrag, villkorliga och looping-uttalanden som finns på de flesta språk. Operatörerna, kontrollutlåtandena och inmatnings- / utgångsansökningarna är mönstrade efter de i C.

operatörer

Operatörerna i AWK, i fall av fallande prioritet, är

()

gruppering

$

Fältreferens.

++ --

Ökning och minskning, både prefix och postfix.

^

Exponentiering (** kan också användas, och **= för uppdragsoperatören).

+ - !

Unary plus, unary minus och logisk negation.

* / %

Multiplikation, division och modul.

+ -

Addition och subtraktion.

rymden

Strängkonsentation.

< >

<= >=

!= == De vanliga relationella operatörerna.

~ !~

Regelbunden expressions match, negerad match. NOTERA: Använd inte ett konstant regelbundet uttryck (/ Foo /) på vänster sida av a ~ eller !~. Använd bara en på höger sida. Uttrycket / foo / ~ exp har samma betydelse som (($ 0 ~ / foo /) ~ exp ). Detta är vanligtvis inte vad var tänkt

i

Array medlemskap.

&&

Logisk OCH.

||

Logisk OR.

?:

C villkorligt uttryck. Detta har formen uttr1 ? uttr2 : expr3 . Om uttr1 är sant, värdet av uttrycket är uttr2 , annars är det expr3 . Endast en av uttr2 och expr3 utvärderas.

= += -=

*= /= %= ^= Uppdrag. Båda absoluta uppdraget ( var = värde ) och operatörsuppdrag (de övriga blanketterna) stöds.

Kontrollutlåtanden

Kontrollförklaringarna är följande:

om ( tillstånd ) påstående annan påstående medan ( tillstånd ) påstående do påstående medan ( tillstånd ) för ( uttr1 ; uttr2 ; expr3 ) påstående för ( var i array ) påstående ha sönder Fortsätta radera array index radera array utgång uttryck { uttalanden }

I / O-uttalanden

Ingångs- / utgångsinställningarna är följande:

stänga( fil , på vilket sätt )

Stäng fil, rör eller samprocess. Den frivilliga på vilket sätt bör endast användas när du stänger ena änden av ett tvåvägs rör till en samprocess. Det måste också vara ett strängvärde "till" eller "från".

getline

Uppsättning $0 från nästa inmatningsrekord uppsättning NF, NR, FNR.

getline < fil

Uppsättning $0 från nästa post på fil ; uppsättning NF.

getline var

Uppsättning var från nästa inmatningsrekord uppsättning NR, FNR.

getline var < fil

Uppsättning var från nästa post på fil .

kommando | getline var

Springa kommando piping utmatningen antingen in $0 eller var , som ovan.

kommando | & getline var

Springa kommando som en samprocess rörs utmatningen antingen in i $0 eller var , som ovan. Samprocesser är a gawk förlängning.

Nästa

Sluta bearbeta den aktuella inmatningsrekordet. Nästa inmatningsrekord läses och bearbetningen börjar med det första mönstret i AWK-programmet. Om slutet på ingångsdata är uppnått, kommer SLUTET block (er), om några, exekveras.

nextfile

Sluta bearbeta den aktuella inmatningsfilen. Nästa inmatningsrekordläsning kommer från nästa inmatningsfil. FILNAMN och ARGIND uppdateras, FNR återställs till 1 och bearbetningen börjar över med det första mönstret i AWK-programmet. Om slutet på ingångsdata är uppnått, kommer SLUTET block (er), om några, exekveras.

skriva ut

Skriver ut aktuell post. Utgångsrekordet avslutas med värdet av ORS variabel.

skriva ut expr-list

Skriver ut uttryck. Varje uttryck skiljs åt av värdet av OFS variabel. Utgångsrekordet avslutas med värdet av ORS variabel.

skriva ut expr-list > fil

Skriver ut uttryck på fil . Varje uttryck skiljs åt av värdet av OFS variabel. Utgångsrekordet avslutas med värdet av ORS variabel.

printf fmt, expr-lista

Formatera och skriva ut.

printf fmt, expr-lista > fil

Formatera och skriv ut på fil .

systemet( cmd-line )

Kör kommandot cmd-line , och returnera utgångsstatusen. (Det här kanske inte är tillgängligt på andra POSIX-system.)

fflush ( fil )

Spola ut buffertar som är associerade med den öppna utdatafilen eller -röret fil . Om fil saknas, då standardutmatningen spolas. Om fil är nollsträngen, då alla öppna utdatafiler och rör har sina buffertar spolade.

Ytterligare omdirigeringar för utmatning är tillåtna för skriva ut och printf.

skriv ut … >> fil

lägger till utdata till fil .

skriv ut … | kommando

skriver på ett rör.

skriv ut … | & kommando

skickar data till en samprocess.

De getline kommandot returnerar 0 på slutet av filen och -1 om ett fel. Vid ett fel, Felkod innehåller en sträng som beskriver problemet.

NOTERA: Om du använder ett rör eller samprocess till getline, eller från skriva ut eller printf inom en slinga, du måste använda sig av stänga() för att skapa nya instanser av kommandot. AWK stänger inte automatiskt rör eller samprocesser när de returnerar EOF.

The Printf Statement

AWK-versionerna av printf uttalande och sprintf () funktionen (se nedan) acceptera följande konverteringsspecifikationsformat:

% c

Ett ASCII-tecken. Om argumentet används för % c är numerisk, det behandlas som ett tecken och skrivs ut. I annat fall antas argumentet vara en sträng, och den enda första tecknet i den strängen skrivs ut.

% d, %jag

Ett decimaltal (heltalets del).

% e,% E

Ett flytande punktnummer på formuläret - d.dddddde + - dd. De % E format användning E istället för e.

% f

Ett flytande punktnummer på formuläret - ddd.dddddd.

% g,% G

Använda sig av % e eller % f omvandling, beroende på vilket som är kortare, med icke-signifikanta nollor undertryckta. De% G format användning % E istället för % e.

%o

Ett osignerat oktaltal (även ett heltal).

% u Ett osignerat decimaltal (igen, ett heltal).

% s

En teckensträng.

% x,% X

Ett osignerat hexadecimalt tal (ett heltal). De % X format användning ABCDEF istället förabcdef.

%%

En enda % karaktär; inget argument konverteras.

Valfritt kan ytterligare parametrar ligga mellan % och kontrollbokstaven:

räkna $

Använd räkna argumentet vid denna punkt i formateringen. Detta kallas a positional specifier och är främst avsedd att användas i översatta versioner av formatsträngar, inte i originaltexten av ett AWK-program. Det är en gawk förlängning.

-

Uttrycket bör lämnas motiverat inom sitt område.

rymden

För numeriska omvandlingar, prefix positiva värden med ett mellanslag och negativa värden med ett minustecken.

+

Plustecknet, som används före breddmodifieraren (se nedan), säger att alltid leverera ett tecken för numeriska omvandlingar, även om de data som ska formateras är positiva. De + överstyrar rymdmodifieraren.

#

Använd en `` alternativ blankett '' för vissa kontrollbokstäver. För %o, leverera en ledande noll. För % x, och % X, leverera en ledande 0x eller 0X för ett icke-nollresultat. För % e, % E, och % f, resultatet innehåller alltid en decimalpunkt. För % g, och % G, efterföljande nollor tas inte bort från resultatet.

0

En ledande 0 (noll) fungerar som en flagga, vilket indikerar att utgången ska polstras med nollor istället för mellanslag. Detta gäller även för icke-numeriska utdataformat. Denna flagga har endast en effekt när fältbredden är bredare än det värde som ska skrivas ut.

bredd

Fältet ska vara vadderat till denna bredd. Fältet är normalt vadderat med mellanslag. Om 0flaggan har använts, den är vadderad med nollor.

. prec

Ett nummer som specificerar precisionen som ska användas vid utskrift. För % e, % E, och % fformat, anger det antalet siffror du vill skriva ut till höger om decimaltalet. För % g, och % G format, anger det maximala antalet signifikanta siffror. För % d, %o, %jag, % u, % x, och % X format, anger det lägsta antalet siffror som ska skrivas ut. För % s, anger det maximalt antal tecken från strängen som ska skrivas ut.

Den dynamiska bredd och prec ANSI C: s kapacitet printf () rutiner stöds. en * i stället för antingen bredd eller prec specifikationer gör att deras värden tas från argumentlistan till printf eller sprintf (). För att använda en positionsspecifik med en dynamisk bredd eller precision, leverera räkna $ efter * i formatsträngen. Till exempel, "% 3 $ * 2 $. * 1 $ s".

Särskilda filnamn

När I / O omdirigeras från antingen skriva ut eller printf till en fil, eller via getline från en fil, gawk känner igen vissa speciella filnamn internt. Dessa filnamn tillåter åtkomst till öppna filbeskrivningar som ärvade från gawk s förälderprocess (vanligtvis skalet). Dessa filnamn kan också användas på kommandoraden för att namnge datafiler. Filnamnen är:

/ Dev / stdin

Standardinmatningen.

/ Dev / stdout

Standardutgången.

/ Dev / stderr

Standardfelutmatningen.

/ Dev / fd / n

Filen är associerad med den öppna filbeskrivaren n .

Dessa är särskilt användbara för felmeddelanden. Till exempel:

skriv ut "Du blåste det!" > "/ dev / stderr"

medan du annars skulle behöva använda

skriv ut "Du blåste det!" | "katt 1> & 2"

Följande speciella filnamn kan användas med |& samprocessoperatör för att skapa TCP / IP-nätverksanslutningar.

/ Inet / tcp / lport / rhost / RPORT

Fil för TCP / IP-anslutning på lokal port lport till fjärrvärden rhost på fjärrporten RPORT . Använd en port av 0 för att få systemet att välja en port.

/ Inet / udp / lport / rhost / RPORT

Liknande men använd UDP / IP istället för TCP / IP.

/ Inet / raw / lport / rhost / RPORT

Reserveras för framtida användning.

Andra speciella filnamn ger tillgång till information om körningen gawk bearbeta. Dessa filnamn är nu föråldrade. Använd procinfo array för att få den information de tillhandahåller. Filnamnen är:

/ Dev / pid

Att läsa den här filen returnerar pro