Navn
gawk - mønster scanning og behandling sprog
Synopsis
gawk POSIX- eller GNU-stilindstillinger -f program-fil -- fil …gawk POSIX eller GNU stil indstillinger -- program-tekst fil … pgawk POSIX- eller GNU-stilindstillinger -f program-fil -- fil …pgawk POSIX eller GNU stil indstillinger -- program-tekst fil … Gawk er GNU Projektets implementering af AWK programmeringssprog. Det er i overensstemmelse med definitionen af sproget i POSIX 1003.2 Command Language and Utilities Standard. Denne version er igen baseret på beskrivelsen i AWK Programmeringssprog , af Aho, Kernighan og Weinberger, med de ekstra funktioner, der findes i System V Release 4 versionen af UNIX awk . Gawk giver også nyere Bell Laboratories awk udvidelser og en række GNU-specifikke udvidelser. Pgawk er profileringsversionen af gawk . Det er identisk på alle måder til gawk , bortset fra at programmerne kører langsommere, og det producerer automatisk en eksekveringsprofil i filen awkprof.out når det er færdigt Se --profil mulighed nedenfor. Kommandolinjen består af muligheder til gawk sig selv, AWK programteksten (hvis den ikke leveres via -f eller --fil muligheder) og værdier, der skal stilles til rådighed i ARGC og argv foruddefinerede AWK-variabler. Gawk Valgmulighederne kan enten være traditionelle POSIX-bogstaver eller GNU-stil lange muligheder. POSIX-muligheder starter med en enkelt `` - '', mens lange muligheder starter med `` - ''. Der er lange muligheder for både GNU-specifikke funktioner og POSIX-mandater. Efter POSIX-standarden, gawk -specifikke muligheder leveres via argumenter til -W mulighed. Mange -W muligheder kan leveres hver -W mulighed har en tilsvarende lang mulighed som beskrevet nedenfor. Argumenter til lange muligheder er enten forbundet med optionen med en = tegn, uden mellemliggende mellemrum, eller de kan leveres i det næste kommandolinjeprincip. Lange muligheder kan forkortes, så længe forkortelsen forbliver unik. Gawk accepterer følgende muligheder, angivet i alfabetisk rækkefølge. -F fs --field-separator fs Brug fs for inputfelt separatoren (værdien af FS foruddefineret variabel). -v Var = val --assign Var = val Tildel værdien val til variablen Var , inden udførelsen af programmet begynder. Sådanne variable værdier er tilgængelige for BEGYNDE blok af et AWK program. -f program-fil --fil program-fil Læs AWK-programkilden fra filen program-fil , i stedet for fra det første kommandolinjeprincip. Mange -f (eller --fil) valgmuligheder kan anvendes. -mf NNN -Hr NNN Indstil forskellige hukommelsesgrænser for værdien NNN . Det f flag angiver det maksimale antal felter og r flag angiver den maksimale rekordstørrelse. Disse to flag og den -m mulighed er fra Bell Laboratories forskningsversion af UNIX awk . De ignoreres af gawk , siden gawk har ingen foruddefinerede grænser. -W kompat -W traditionelle --compat --traditionel Løb ind kompatibilitet mode. I kompatibilitetstilstand gawk opfører sig identisk med UNIX awk ; ingen af de GNU-specifikke udvidelser er anerkendt. Brugen af --traditionel foretrækkes over de andre former for denne mulighed. Se GNU EXTENSIONS, nedenfor, for mere information. -W copyleft -W ophavsret --copyleft --ophavsret Udskriv den korte version af GNU copyright information meddelelsen på standard output og exit med succes. -W dump-variabler= fil --dump-variable= fil Udskriv en sorteret liste over globale variabler, deres typer og endelige værdier til fil . Hvis nej fil er sørget for, gawk bruger en navngivet fil awkvars.out i den aktuelle mappe. At have en liste over alle de globale variabler er en god måde at kigge efter typografiske fejl i dine programmer. Du vil også bruge denne indstilling, hvis du har et stort program med mange funktioner, og du vil være sikker på, at dine funktioner ikke utilsigtet bruger globale variabler, som du mente at være lokale. (Dette er en særlig let fejl at lave med enkle variable navne som jeg, j, og så videre.) -W hjælp -W brug --Hjælp --usage Udskriv en relativt kort oversigt over de tilgængelige indstillinger på standard output. (Pr GNU kodningsstandarder , disse muligheder giver en øjeblikkelig og vellykket afslutning.) -W lint= fatal --lint= fatal Giv advarsler om konstruktioner, der er tvivlsomme eller ikke-bærbare til andre AWK-implementeringer. Med et valgfrit argument af fatal, lint advarsler bliver fatale fejl. Dette kan være drastisk, men dets brug vil helt sikkert fremme udviklingen af renere AWK-programmer. -W lint-old --lint gammel Giv advarsler om konstruktioner, der ikke er bærbare til den originale version af Unix awk . -W gen-po --gen-po Scan og analyser AWK programmet, og generer en GNU .po format fil på standard output med poster for alle lokaliserbare strenge i programmet. Programmet selv udføres ikke. Se GNU gettext distribution for mere information om .po filer. -W ikke-decimaldata --non-decimal-data Genkendelse af okalære og hexadecimale værdier i inputdata. Brug denne mulighed med stor forsigtighed! -W posix --posix Dette tænder kompatibilitet tilstand med følgende yderligere begrænsninger: * x Escape-sekvenser genkendes ikke. * Kun plads og fane fungerer som feltafskiller når FS er sat til et enkelt rum, newline gør det ikke. * Du kan ikke fortsætte linjer efter ? og :. * Synonymet funk for søgeordet fungere er ikke anerkendt. * Operatørerne ** og **= kan ikke bruges i stedet for ^ og ^=. * Det fflush () funktion er ikke tilgængelig. -W profil= prof_file --profil= prof_file Send profileringsdata til prof_file . Standard er awkprof.out. Når kører med gawk , profilen er bare en `` smuk udskrivet '' version af programmet. Når kører med pgawk , indeholder profilen udførelsestællinger for hver sætning i programmet i venstre margen og funktionsopkaldstællinger for hver brugerdefineret funktion. -W geninterval --re-interval Aktivér brugen af interval udtryk i ordinært udtryk matchende (se Regelmæssige udtryk, nedenfor). Intervaludtryk var ikke traditionelt tilgængelige på AWK-sproget. POSIX-standarden tilføjede dem for at gøre awk og egrep i overensstemmelse med hinanden. Men deres brug vil sandsynligvis bryde gamle AWK-programmer gawk giver kun dem, hvis de bliver bedt om med denne indstilling, eller hvornår --posix er angivet. -W kilde program-tekst --kilde program-tekst Brug program-tekst som AWK program kildekode. Denne mulighed gør det nemt at blande bibliotekets funktioner (bruges via -f og --fil indstillinger) med kildekode indtastet på kommandolinjen. Det er primært beregnet til mellemstore til store AWK programmer, der anvendes i shell scripts. -W version --version Udskriftsversionsoplysninger for denne særlige kopi af gawk på standard output. Dette er nyttigt primært for at vide, om den nuværende kopi af gawk på dit system er opdateret med hensyn til, hvad Fri Software Foundation distribuerer. Dette er også nyttigt, når du rapporterer fejl. (Pr GNU kodningsstandarder , disse muligheder giver en øjeblikkelig og vellykket afslutning.) -- Signal slutningen af muligheder. Dette er nyttigt for at tillade yderligere argumenter til AWK-programmet selv at starte med en `` - ''. Dette er hovedsagelig for konsistens med argumentet parsing konvention, der anvendes af de fleste andre POSIX programmer. I kompatibilitetsmodus markeres eventuelle andre muligheder som ugyldige, men ignoreres ellers. Under normal drift, så længe programtekst er blevet leveret, sendes ukendte indstillinger til AWK-programmet i argv array til behandling. Dette er især nyttigt for at køre AWK-programmer via den `` #! '' Eksekverbare tolkmekanisme. AWK PROGRAMVIRKSOMHED Et AWK program består af en sekvens af mønster-action udsagn og valgfri funktionsdefinitioner. mønster { handling udsagn }fungere navn ( parameter liste ) { udsagn }
Gawk Først læses programkilden fra program-fil (s) hvis angivet, fra argumenter til --kilde, eller fra det første non-option argument på kommandolinjen. Det -f og --kilde indstillinger kan bruges flere gange på kommandolinjen. Gawk læser programteksten som om alle de program-fil s og kommandolinjekildetekster var blevet sammenkædet sammen. Dette er nyttigt til opbygning af biblioteker i AWK-funktioner uden at skulle medtage dem i hvert nyt AWK-program, der bruger dem. Det giver også mulighed for at blande biblioteksfunktioner med kommandolinjeprogrammer. Miljøvariablen AWKPATH angiver en søgevej, der skal bruges, når du finder kildefiler, der er navngivet med -f mulighed. Hvis denne variabel ikke findes, er standardbanen":. / Usr / local / share / awk". (Den faktiske katalog kan variere afhængigt af hvordan gawk blev bygget og installeret.) Hvis et filnavn givet til -f indstillingen indeholder et `` / '' tegn, der udføres ingen stedsøgning. Gawk udfører AWK-programmer i følgende rækkefølge. For det første alle variable opgaver angivet via -v mulighed udføres. Næste, gawk kompilerer programmet i en intern form. Derefter, gawk udfører koden i BEGYNDE blok (r) (hvis nogen), og fortsætter derefter med at læse hver fil, der er navngivet i argv array. Hvis der ikke er navngivne filer på kommandolinjen, gawk læser standardindgangen. Hvis et filnavn på kommandolinjen har formularen Var = val det behandles som en variabel opgave. Variabelen Var vil blive tildelt værdien val . (Dette sker efter nogen BEGYNDE blok (r) er blevet kørt.) Kommandolinjevariabel tildeling er mest nyttig til dynamisk tildeling af værdier til variablerne AWK bruger til at kontrollere, hvordan input er brudt i felter og optegnelser. Det er også nyttigt at kontrollere tilstand, hvis der skal bruges flere passeringer over en enkelt datafil. Hvis værdien af et bestemt element i argv er tom (''), gawk hopper over det. For hver post i indgangen, gawk test for at se om det passer til nogen mønster i AWK-programmet. For hvert mønster, som posten matcher, den tilknyttede handling udføres. Mønstrene testes i den rækkefølge, de forekommer i programmet. Endelig er alle inputerne opbrugt, gawk udfører koden i ENDE blok (er) (hvis nogen). AWK-variabler er dynamiske; de opstår, når de først bliver brugt. Deres værdier er enten floating point tal eller strenge, eller begge, afhængigt af hvordan de bruges. AWK har også endimensionelle arrays; Arrays med flere dimensioner kan simuleres. Flere foruddefinerede variabler er indstillet som et program kører; Disse vil blive beskrevet som nødvendigt og opsummeret nedenfor. Normalt adskilles arkiver med newline-tegn. Du kan styre, hvordan poster adskilles ved at tildele værdier til den indbyggede variabel RS. Hvis RS er et enkelt tegn, det tegn adskiller poster. Ellers, RS er et regulært udtryk. Tekst i input, der matcher dette regulære udtryk, adskiller posten. I kompatibilitetsfunktionen bruges kun den første tegn af sin strengværdi til at adskille poster. Hvis RS er sat til null-strengen, så adskilles der adskilte linjer. Hvornår RS er sat til null-strengen, fungerer newline-karakteren altid som en feltseparator, ud over hvilken som helst værdi FS kan have. Da hver input record læses, gawk splitter rekorden i felter , ved hjælp af værdien af FS variabel som feltseparator. Hvis FS er et enkelt tegn, felter adskilles af det pågældende tegn. Hvis FS er nullstrengen, bliver hver enkelt karakter et separat felt. Ellers, FS forventes at være et fuldt regulært udtryk. I det særlige tilfælde, at FS er et enkelt rum, felter er adskilt af kørsler af mellemrum og / eller faner og / eller nye linjer. (Men se diskussionen om --posix, nedenfor). BEMÆRK: Værdien af ignorecase (se nedenfor) påvirker også, hvordan felter opdeles når FS er et regulært udtryk, og hvordan optegnelser adskilles hvornår RS er et regulært udtryk. Hvis FIELDWIDTHS variabel er sat til en rumskilt liste over tal, forventes hvert felt at have fast bredde og gawk opdeler pladen ved hjælp af de angivne bredder. Værdien af FS ignoreres. Tildele en ny værdi til FS tilsidesætter brugen af FIELDWIDTHS, og genopretter standardadfærd. Hvert felt i indtastningsfortegnelsen kan henvises af dets position, $1, $2, og så videre. $0 er hele pladen. Felter behøver ikke at blive refereret af konstanter: n = 5print $ n udskriver det femte felt i input posten. Variabelen NF er sat til det samlede antal felter i indtastningsoptegnelsen. Henvisninger til ikke-eksisterende felter (dvs. felter efter $ NF) producerer null-strengen. Men tildeling til et ikke-eksisterende felt (f.eks. $ (NF + 2) = 5) øger værdien af NF, skaber mellemliggende felter med nullstrengen som deres værdi og forårsager værdien af $0 at blive rekomputeret, med markerne adskilt af værdien af OFS. Henvisninger til negative nummererede felter medfører en fatal fejl. decrementing NF forårsager værdierne af felter forbi den nye værdi, der går tabt, og værdien af $0 at blive rekomputeret, med markerne adskilt af værdien af OFS. Ved tildeling af en værdi til et eksisterende felt får hele posten genopbygges, når $0 er refereret. Tilsvarende tildele en værdi til $0 får rekordet til at blive splittet og skaber nye værdier for felterne. Gawk 's indbyggede variabler er: ARGC Antallet af kommandolinjeparametre (inkluderer ikke valgmuligheder til gawk , eller programkilden). ARGIND Indekset i argv af den aktuelle fil, der behandles. argv Array of command line arguments. Opstillingen er indekseret fra 0 til ARGC - 1. Dynamisk ændring af indholdet af argv kan styre de filer, der bruges til data. BINMODE På ikke-POSIX-systemer specificeres brugen af `` binær '' -tilstand for al fil I / O. Numeriske værdier på 1, 2 eller 3 angiver, at inputfiler, outputfiler eller alle filer skal bruge binær I / O. Strengværdier af "R", eller "W" Angiv, at input filer eller henholdsvis outputfiler skal bruge binær I / O. Strengværdier af "Rw" eller "WR" Angiv, at alle filer skal bruge binære I / O. Enhver strengværdi behandles som "Rw", men genererer en advarselsmeddelelse. CONVFMT Konverteringsformatet for tal, "% .6g", som standard. ENVIRON Et array indeholdende værdierne for det nuværende miljø. Arrayet er indekseret af miljøvariablerne, idet hvert element er værdien af den variable (f.eks.ENVIRON "HOME" måske / Home / arnold). Ændring af denne array påvirker ikke miljøet set af programmer som gawk gyder via omdirigering eller system()fungere. errno Hvis der opstår en systemfejl, gøres omdirigering til getline, under en læsning for getline, eller under a tæt(), derefter errno vil indeholde en streng, der beskriver fejlen. Værdien er underlagt oversættelse i ikke-engelske lokaliteter. FIELDWIDTHS En hvid-rums adskilt liste over feltbredder. Når indstillet, gawk analyserer indgangen i felter med fast bredde i stedet for at bruge værdien af FS variabel som feltseparator. FILNAVN Navnet på den aktuelle inputfil.Hvis der ikke er angivet nogen filer på kommandolinjen, er værdien af FILNAVN er `` - ''. Imidlertid, FILNAVN er udefineret inde i BEGYNDE blokere (medmindre det er angivet af getline). FNR Indtastningsnummeret i den aktuelle inputfil. FS Indtastningsfelt separatoren, et mellemrum som standard. Se Felterovenfor. ignorecase Styrer følsomheden af alle regulære udtryk og strengoperationer. Hvis ignorecase har en værdi, der ikke er nul, derefter streng sammenligninger og mønster matchning i regler, feltdeling med FS, rekord adskiller med RS, regelmæssigt udtryk, der matcher med ~og !~, og gensub (), gsub (), indeks(), match(), dele(), og sub () indbyggede funktioner alle ignorerer tilfælde, når du udfører regulære udtryk. BEMÆRK: Array abonnement er ikke påvirket, og det er heller ikke asort () fungere. Således, hvis ignorecase er ikke lig med nul, / AB / matcher alle strengene "Ab", "AB","Ab", og "AB". Som med alle AWK-variabler, er den oprindelige værdi af ignorecase er nul, så er alle regulære udtryk og strengoperationer normalt sagerfølsomme. Under Unix anvendes det fulde ISO 8859-1 Latin-1 tegnsæt, når man ignorerer sag. LINT Giver dynamisk kontrol af --lint mulighed inden for et AWK-program. Når sandt, gawk udskriver lint advarsler. Når falsk, det gør det ikke. Når tildelt strengværdien "fatal", lint advarsler bliver fatale fejl, præcis som --lint = fatal. Enhver anden ægte værdi udskriver bare advarsler. NF Antallet af felter i den aktuelle input-post. NR Det samlede antal input-poster, der ses hidtil. OFMT Udgangsformatet for tal, "% .6g", som standard. OFS Udgangsfelt separatoren, et mellemrum som standard. ORS Output record separatoren, som standard en ny linje. PROCINFO Elementerne i dette array giver adgang til oplysninger om det løbende AWK-program. På nogle systemer kan der være elementer i arrayet, "GROUP1" igennem "gruppe n ' for nogle n , hvilket er antallet af supplerende grupper, som processen har. Brug i operatør til at teste for disse elementer. Følgende elementer er garanteret at være tilgængelige: PROCINFO "egid" værdien af getegid (2) systemopkald. PROCINFO "euid" værdien af geteuid (2) systemopkald. PROCINFO "FS" "FS" hvis feltet opdeles med FS er i kraft, eller "FIELDWIDTHS" hvis feltet opdeles med FIELDWIDTHS er i kraft. PROCINFO "gid" værdien af getgid (2) systemopkald. PROCINFO "pgrpid" procesgruppen ID for den aktuelle proces. PROCINFO "pid" proces ID for den aktuelle proces. PROCINFO "ppid" forløberproces ID for den aktuelle proces. PROCINFO "uid" værdien af getuid (2) systemopkald. RS Indtastningsarkivatoren, som standard en ny linje. RT Rekordterminatoren. Gawk sæt RT til den indtastede tekst, der matchede det tegn eller det regulære udtryk, der er angivet af RS. RSTART Indekset for det første tegn matchet af match(); 0 hvis ingen match. (Dette indebærer at tegnindeks starter ved en.) RLENGTH Strengenes længde matches af match(); -1 hvis ingen match. SUBSEP Tegnet bruges til at adskille flere abonnementer i arrayelementer som standard ' 034'. TEKSTDOMÆNE Teksten domæne af AWK programmet; bruges til at finde de lokaliserede oversættelser til programmets strenge. Arrays er abonneret med et udtryk mellem firkantede parenteser ( og ). Hvis udtrykket er en ekspressionsliste ( expr , expr …) er array subscriptet en streng bestående af sammenkædningen af (streng) værdien af hvert udtryk, adskilt af værdien af SUBSEP variabel. Denne facilitet bruges til at simulere multiplikationsdimensionerede arrayer. For eksempel: i = "a"; j = "B"; k = "C"x i, j, k = "hej, verden n" tildeler strengen "Hej, verden n" til elementet i arrayet x som er indekseret af strengen"A 034B 034C". Alle arrays i AWK er associative, dvs. indekseret af strengværdier. Den særlige operatør i kan anvendes i en hvis eller mens erklæring for at se om et array har et indeks bestående af en bestemt værdi. hvis (val i array) print array val Hvis arrayet har flere abonnementer, skal du bruge (i, j) i array. Det i konstruktion kan også anvendes i a til loop for at gentage over alle elementer i et array. Et element kan slettes fra en matrix ved hjælp af slette udmelding. Det slette erklæringen kan også bruges til at slette hele indholdet af et array, blot ved at angive arraynavnet uden et abonnement. Variabler og felter kan være (floating point) tal eller strings eller begge dele. Hvordan værdien af en variabel fortolkes afhænger af dens sammenhæng. Hvis den bruges i et numerisk udtryk, bliver det behandlet som et tal, hvis det bruges som en streng, bliver det behandlet som en streng. For at tvinge en variabel til at blive behandlet som et nummer, tilføj 0 til det; at tvinge det til at blive behandlet som en streng, sammenkoble det med nullstrengen. Når en streng skal konverteres til et tal, udføres konverteringen ved hjælp af strtod (3). Et tal konverteres til en streng ved at bruge værdien af CONVFMT som en formatstreng til sprintf (3), med den numeriske værdi af variablen som argumentet. Men selv om alle tal i AWK er flydende punkt, er integrale værdier altid konverteres som heltal. Således givet CONVFMT = "% 2.2f" a = 12 b = en "" variablen b har en strengværdi på '12' og ikke '12.00'. Gawk udfører sammenligninger som følger: Hvis to variable er numeriske, sammenlignes de numerisk. Hvis en værdi er numerisk, og den anden har en strengværdi, der er en `` numerisk streng '', foretages sammenligninger også numerisk. Ellers konverteres den numeriske værdi til en streng, og en streng sammenligning udføres. To strenge sammenlignes naturligvis som strenge. Bemærk, at POSIX-standarden anvender begrebet `` numerisk streng '' overalt, selv til strengkonstanter. Dette er imidlertid klart ukorrekt, og gawk gør ikke dette. (Heldigvis er dette løst i den næste version af standarden.) Bemærk at strengkonstanter, f.eks '57', er ikke numeriske strenge, de er strengkonstanter. Ideen om `` numerisk streng '' gælder kun for felter, getline input, FILNAVN, argv elementer, ENVIRON elementer og elementerne i et array lavet af dele() det er numeriske strenge. Den grundlæggende ide er det brugerindgang , og kun brugerindgang, der ser numerisk ud, skal behandles på den måde. Uninitialiserede variabler har den numeriske værdi 0 og strengværdien "" (null eller tom streng). Begyndende med version 3.1 af gawk, Du kan bruge C-stil oktal og hexadecimal konstanter i din AWK program kildekode. For eksempel den oktale værdi 011 er lig med decimal 9, og den hexadecimale værdi 0x11 er lig med decimal 17. Stringkonstanter i AWK er sekvenser af tegn indesluttet mellem dobbelt citater ('). Inden for strenge, visse flugtsekvenser er anerkendt som i C. Disse er: \ Et bogstaveligt tilbageslag. en Den '' advarsel '' karakter; normalt ASCII BEL karakteren. b backspace. f formular-foder. n ny linje. r vognretur. t vandret faneblad. v lodret faneblad. x hex cifre Tegnet repræsenteret af strengen af hexadecimale cifre efter x. Som i ANSIC betragtes alle følgende hexadecimale cifre som en del af undslippesekvensen. (Denne funktion skal fortælle os noget om sprogdesign af udvalg.) F.eks. " X1B" er ASCIIESC (escape) karakteren. ddd Tegnet repræsenteret af 1-, 2- eller 3-cifret sekvens af okale cifre. F.eks., ' 033' er ASCII ESC (escape) karakter. c Den bogstavelige karakter c . Escape-sekvenserne kan også anvendes inden for konstante regulære udtryk (f.eks./ t f n r v / matcher hvide rums tegn). I kompatibilitetsmodus behandles tegnene repræsenteret ved oktale og hexadecimale flugtsekvenser bogstaveligt, når de anvendes i regulære ekspressionskonstanter. Dermed, / A 52b / svarer til/ A * b /. AWK er et line-orienteret sprog. Mønsteret kommer først, og derefter handlingen. Handlingsopgørelser er vedlagt i { og }. Enten mangler mønsteret, eller handlingen kan mangle, men selvfølgelig ikke begge dele. Hvis mønsteret mangler, udføres handlingen for hver enkelt rekord af input. En manglende handling svarer til { Print } som udskriver hele posten. Kommentarer begynder med tegnet `` # '', og fortsæt til slutningen af linjen. Blanke linjer kan bruges til at adskille udsagn. Normalt slutter en erklæring med en ny linje, men det er ikke tilfældet for linjer, der slutter i en ``, '' {, ?, :, &&, eller ||. Linjer slutter i gøre eller andet også deres udtalelser automatisk fortsatte på den følgende linje. I andre tilfælde kan en linje fortsættes ved at afslutte den med en ', i hvilket tilfælde newline vil blive ignoreret. Flere udsagn kan sættes på en linje ved at adskille dem med en ``; ''. Dette gælder både udsagnene i handlingsdelen af et mønster-action-par (det sædvanlige tilfælde) og til selve mønster-handling erklæringerne. AWK-mønstre kan være et af følgende: BEGYNDE ENDE / almindelig udtryk / relationelt udtryk mønster && mønster mønster || mønster mønster ? mønster : mønster ( mønster ) ! mønster Pattern1 , pattern2 BEGYNDE og ENDE er to særlige slags mønstre, som ikke testes mod input. Handlingen dele af alle BEGYNDE mønstre fusioneres som om alle udsagn var skrevet i en enkelt BEGYNDE blok. De udføres før noget af input læses. Ligeledes alle de ENDE blokke fusioneres og udføres, når al input er udtømt (eller når en Afslut erklæring udføres). BEGYNDE og ENDE mønstre kan ikke kombineres med andre mønstre i mønsterudtryk. BEGYNDE og ENDE mønstre kan ikke have manglende handling dele. Til / almindelig udtryk / mønstre bliver den tilknyttede erklæring udført for hver input-post, der matcher det regulære udtryk. Regelmæssige udtryk er de samme som dem i egrep (1), og er opsummeret nedenfor. EN relationelt udtryk kan bruge nogen af de operatører, der er defineret nedenfor i afsnittet om handlinger. Disse tester generelt om bestemte felter matcher visse regulære udtryk. Det &&, ||, og ! operatører er logiske OG, logiske ELLER og logiske IKKE, henholdsvis som i C. De foretager kortslutningsevaluering, også som i C, og bruges til at kombinere mere primitive mønsterudtryk. Som på de fleste sprog kan parentes bruges til at ændre evalueringsrækkefølgen. Det ?: operatør er som den samme operatør i C. Hvis det første mønster er sandt, er mønsteret der bruges til testning det andet mønster, ellers er det det tredje. Kun et af andet og tredje mønster vurderes. Det Pattern1 , pattern2 form af et udtryk kaldes a rækkevidde mønster . Det matcher alle input records, der starter med en rekord, der matcher Pattern1 , og fortsætter til en rekord, der matcher pattern2 , inklusive. Det kombineres ikke med nogen anden form for mønsterudtryk. Regelmæssige udtryk er den udvidede art, der findes i egrep . De består af tegn som følger: c matcher ikke-metacharacteren c . c matcher den bogstavelige karakter c . . matcher ethvert tegn inklusive ny linje. ^ matcher begyndelsen af en streng. $ matcher enden af en streng. abc … tegnliste, svarer til et af tegnene abc … . ^ abc … negeret karakter liste, matcher ethvert tegn undtagen abc … . r1 | r2 Alternation: Matcher enten r1 eller r2 . R1R2 sammenkædning: kampe r1 , og så r2 . r + matcher en eller flere r 'S. r * matcher nul eller mere r 'S. r ? matcher nul eller en r 'S. ( r ) gruppering: kampe r . r { n } r { n ,} r { n , m } Et eller to tal inde i armbøjler angiver en interval ekspression . Hvis der er et tal i bøjlerne, er det foregående regulære udtryk r gentages n gange. Hvis der er to tal adskilt af et komma, r gentages n til m gange. Hvis der er et tal efterfulgt af et komma, så r gentages i det mindste n gange. Intervaludtryk er kun tilgængelige, hvis det er tilfældet --posix eller --re-interval er angivet på kommandolinjen. y matcher den tomme streng i enten begyndelsen eller slutningen af et ord. B matcher den tomme streng inden for et ord. < matcher den tomme streng i begyndelsen af et ord. > matcher den tomme streng i slutningen af et ord. w matcher ethvert ordbestandigt tegn (bogstav, ciffer eller understregning). W matcher ethvert tegn, der ikke er ordbestanddel. ` matcher den tomme streng i starten af en buffer (streng). ' matcher den tomme streng i slutningen af en buffer. Escape-sekvenserne, der er gyldige i strengkonstanter (se nedenfor), gælder også i regulære udtryk. Karakterklasser er en ny funktion introduceret i POSIX standarden. En tegnklasse er en speciel notation til beskrivelse af lister over tegn, der har en specifik egenskab, men hvor de faktiske tegn selv kan variere fra land til land og / eller fra tegn til tegnsæt. For eksempel er begrebet af, hvad der er en alfabetisk karakter, forskellig i USA og i Frankrig. En tegnklasse er kun gyldig i et regulært udtryk inde parenteserne i en tegnliste. Karakterklasser består af :, et søgeord, der angiver klassen og :. Karakterklasserne defineret af POSIX-standarden er: : Alnum: Alfanumeriske tegn. : Alpha: Alfabetiske tegn. :blank: Mellemrum eller fane tegn. : Cntrl: Kontrol tegn. : Ciffer: Numeriske tegn. :kurve: Tegn, der både kan udskrives og synlige. (Et rum kan udskrives, men ikke synligt, mens en -en er begge.) :nederste: Alvorlige bogstaver i små bogstaver. :Print: Udskrivbare tegn (tegn, der ikke er kontrol tegn.) : PUNCT: Tegnsætningstegn (tegn, der ikke er bogstav, cifre, kontroltegn eller mellemrumstegn). :plads: Mellemrumstegn (som f.eks. Mellemrum, fane og formfeed for at nævne nogle få). :øverst: Overordnede alfabetiske tegn. : Xdigit: Tegn, der er hexadecimale cifre. For eksempel, før POSIX-standarden, for at matche alfanumeriske tegn, ville du være nødt til at skrive / A-Za-Z0-9 /. Hvis din tegnsæt havde andre alfabetiske tegn i det, ville det ikke svare dem, og hvis din tegnsæt samledes forskelligt fra ASCII, svarer dette måske ikke ens til de ASCII alfanumeriske tegn. Med POSIX-karakterklasserne kan du skrive/ : Alnum: /, og dette matcher de alfabetiske og numeriske tegn i dit tegnsæt. To ekstra specielle sekvenser kan vises i karakterlister. Disse gælder for ikke-ASCII tegn sæt, som kan have enkelt symboler (kaldet sorteringselementer ), der er repræsenteret med mere end et tegn, samt flere tegn, der svarer til sortering , eller sortering, formål. (Eksempelvis på fransk er en almindelig `` e '' og en grav-accented e 'ækvivalent.) Collating Symbols Et collating symbol er et multi-karakter collating element indeholdt i . og .. For eksempel, hvis ch er et collating element, så .Ch. er et regulært udtryk, der matcher dette collating element, mens Ch er et regulært udtryk, der matcher enten c eller h. Equivalence Classes En ækvivalensklasse er et lokalspecifik navn for en liste over tegn, der er ækvivalente. Navnet er vedlagt i = og =. For eksempel navnet e kan bruges til at repræsentere alle `` e, '' `` e ',' 'og `` e`.' 'I dette tilfælde, = E = er et regulært udtryk, der matcher nogen af e, e', eller e`. Disse funktioner er meget værdifulde i ikke-engelsktalende lokaliteter. Biblioteket fungerer som gawk Anvendelser til regelmæssig ekspression matcher i øjeblikket kun POSIX-karakterklasser; de anerkender ikke collating symboler eller ækvivalens klasser. Det y, B, <, >, w, W, `, og ' operatører er specifikke for gawk ; de er udvidelser baseret på faciliteter i GNU regulære ekspressionsbiblioteker. De forskellige kommandolinjeindstillinger styrer hvordan gawk fortolker tegn i regulære udtryk. Ingen muligheder I standard tilfælde gawk give alle faciliteterne i POSIX regulære udtryk og deGNU regulære udtryk operatører beskrevet ovenfor. Intervalludtryk understøttes dog ikke. --posix Kun POSIX-regulære udtryk understøttes, GNU-operatørerne er ikke specielle. (F.eks., w matcher en bogstavelig w). Interval udtryk er tilladt. --traditionel Traditionel Unix awk regulære udtryk matches. GNU-operatørerne er ikke specielle, intervalludtryk er ikke tilgængelige, og heller ikke POSIX-karakterklasserne (: Alnum: og så videre). Tegn beskrevet af oktale og hexadecimale flugtsekvenser behandles bogstaveligt, selvom de repræsenterer ordinære udtryk metakarakter. --re-interval Tillad interval udtryk i regulære udtryk, selvom --traditionel er blevet leveret. Handlingsopgørelser er vedlagt i seler, { og }. Handlingserklæringer består af de sædvanlige opgavebetingelser, betingede og looping-sætninger, der findes på de fleste sprog. Operatørerne, kontrolopgørelserne og de tilgængelige input / output-udsagn er mønsteret efter de i C. Operatørerne i AWK, i overensstemmelse med faldende forrang, er (…) Gruppering $ Feltreference. ++ -- Forøgelse og formindskelse, både præfiks og postfix. ^ Eksponering (** kan også bruges, og **= til opgaveoperatøren). + - ! Unary plus, unary minus og logisk negation. * / % Multiplikation, division og modul. + - Tilsætning og subtraktion. plads String-sammenkædning. < > <= >= != == De regelmæssige relationelle operatører. ~ !~ Regelmæssig ekspressionskamp, negeret kamp. BEMÆRK: Brug ikke et konstant regulært udtryk (/ Foo /) på venstre side af a ~ eller !~. Brug kun en på højre side. Udtrykket / foo / ~ exp har samme betydning som (($ 0 ~ / foo /) ~ exp ). Dette er normalt ikke hvad var meningen i Array medlemskab. && Logisk AND. || Logisk ELLER. ?: Det C-betingede udtryk. Dette har formularen Udtr1 ? Udtr2 : expr3 . Hvis Udtr1 er sandt, er værdien af udtrykket Udtr2 , ellers er det expr3 . Kun en af Udtr2 og expr3 er evalueret. = += -= *= /= %= ^= Overdragelse. Begge absolutte opgaver ( Var = værdi ) og operatør tildeling (de andre formularer) understøttes. Kontrolopgørelserne er som følger: hvis ( tilstand ) udmelding andet udmelding mens ( tilstand ) udmelding gøre udmelding mens ( tilstand ) til ( Udtr1 ; Udtr2 ; expr3 ) udmelding til ( Var i matrix ) udmelding pause Blive ved slette matrix indeks slette matrix Afslut ekspression { udsagn } Indgangs- / udgangssætningerne er som følger: tæt( fil , hvordan ) Luk fil, rør eller samproces. Den valgfrie hvordan bør kun bruges, når du lukker den ene ende af et tovejsrør til en samproces. Det skal også være en strengværdi "til" eller "fra". getline Sæt $0 fra næste input record; sæt NF, NR, FNR. getline < fil Sæt $0 fra næste rekord af fil ; sæt NF. getline Var Sæt Var fra næste input record; sæt NR, FNR. getline Var < fil Sæt Var fra næste rekord af fil . kommando | getline Var Løb kommando Rør udgangen enten ind i $0 eller Var , som ovenfor. kommando | & getline Var Løb kommando som en samarbejdsproces leder produktionen enten ind i $0 eller Var , som ovenfor. Co-processer er a gawk udvidelse. Næste Stop med at behandle den aktuelle input-post. Den næste indtastningsplade læses, og behandlingen starter med det første mønster i AWK-programmet. Hvis slutningen af inputdata er nået, vil ENDE Blokeres eventuelle blokke. nextfile Stop med at behandle den aktuelle inputfil. Næste indlæsningspladslæsning kommer fra den næste inputfil. FILNAVN og ARGIND opdateres, FNR nulstilles til 1, og behandlingen begynder med det første mønster i AWK-programmet. Hvis slutningen af inputdata er nået, vil ENDE Blokeres eventuelle blokke. Print Udskriver den aktuelle post. Udgangsposten afsluttes med værdien af ORS variabel. Print expr-liste Udskriver udtryk. Hvert udtryk er adskilt af værdien af OFS variabel. Udgangsposten afsluttes med værdien af ORS variabel. Print expr-liste > fil Udskriver udtryk på fil . Hvert udtryk er adskilt af værdien af OFS variabel. Udgangsposten afsluttes med værdien af ORS variabel. printf fmt, expr-liste Formater og udskrive. printf fmt, expr-liste > fil Format og udskrive på fil . system( cmd-line ) Udfør kommandoen cmd-line , og returner exitstatusen. (Dette er muligvis ikke tilgængeligt på ikke-POSIX-systemer.) fflush ( fil ) Skyl alle buffere i forbindelse med den åbne udgangsfil eller -rør fil . Hvis fil mangler, bliver standard udgang skyllet. Hvis fil er nullstrengen, så er alle åbne udgangsfiler og rør, deres buffere spylt. Yderligere output omdirigeringer er tilladt for Print og printf. print … >> fil tilføjer output til fil . udskrive … | kommando skriver på et rør. print … | & kommando sender data til en samproces. Det getline kommandoen returnerer 0 på slutningen af filen og -1 på en fejl. Ved en fejl, errno indeholder en streng, der beskriver problemet. BEMÆRK: Hvis du bruger et rør eller samprocesser til getline, eller fra Print eller printf i en loop, du skal brug tæt() at oprette nye forekomster af kommandoen. AWK lukker ikke automatisk rør eller samprocesser, når de returnerer EOF. AWK versioner af printf erklæring og sprintf () funktion (se nedenfor) acceptere følgende konverteringsspecifikationsformater: % c Et ASCII-tegn. Hvis argumentet bruges til % c er numerisk, det behandles som et tegn og trykt. Ellers antages argumentet at være en streng, og den eneste første tegn på den pågældende streng udskrives. % d, %jeg Et decimaltal (heltaldelen). % e,% E Et flytende punktnummer på formularen - d.dddddde + - dd. Det % E format anvendelser E i stedet for e. % f Et flytende punktnummer på formularen - ddd.dddddd. % g,% G Brug % e eller % f konvertering, alt efter hvad der er kortere, med ubetydelige nuler undertrykt. Det% G format anvendelser % E i stedet for % e. % o Et usigneret oktalnummer (også et helt tal). % u Et usigneret decimaltal (igen et helt tal). % s En tegnstreng. % x,% X Et usigneret hexadecimalt tal (et helt tal). Det %X format anvendelser ABCDEF i stedet forabcdef. %% En enkelt % Karakter; intet argument omdannes. Valgfrit, yderligere parametre kan ligge mellem % og kontrolbrevet: tælle $ Brug tælle argumentet på dette tidspunkt i formateringen. Dette kaldes a positional specifier og er primært beregnet til brug i oversatte versioner af formatstrenger, ikke i den originale tekst af et AWK-program. Det er en gawk udvidelse. - Udtrykket skal være retfærdiggjort inden for sit område. plads For numeriske konverteringer, præfiks positive værdier med et mellemrum og negative værdier med et minustegn. + Plustegnet, der blev brugt før breddemodifikatoren (se nedenfor), siger altid at give et tegn til numeriske konverteringer, selvom de data, der skal formateres, er positive. Det + overstyrer rummodifikatoren. # Brug en `` alternativ form '' for visse kontrolbogstaver. Til % o, levere en førende nul. Til %x, og %X, levere en førende 0x eller 0X for et nonzero resultat. Til % e, % E, og % f, resultatet indeholder altid et decimaltal. Til % g, og % G, efterfølgende nuller fjernes ikke fra resultatet. 0 En førende 0 (nul) fungerer som et flag, der angiver, at output skal polstres med nuller i stedet for mellemrum. Dette gælder også til ikke-numeriske outputformater. Dette flag har kun en effekt, når feltbredden er bredere end den værdi, der skal udskrives. bredde Feltet skal polstres til denne bredde. Feltet er normalt polstret med mellemrum. Hvis 0flag er blevet brugt, den er polstret med nuller. . PREC Et nummer, der angiver den præcision, der skal anvendes ved udskrivning. For % e, % E, og % fformater, dette angiver antallet af cifre, du ønsker trykt til højre for decimaltegnet. For % g, og % G formater, angiver det det maksimale antal signifikante cifre. For % d, % o, %jeg, % u, %x, og %X formater, angiver det mindste antal cifre, der skal udskrives. Til % s, angiver det det maksimale antal tegn fra den streng, der skal udskrives. Den dynamiske bredde og PREC ANSI C's muligheder printf () rutiner understøttes. EN * i stedet for enten bredde eller PREC specifikationer får deres værdier til at blive taget fra argumentlisten til printf eller sprintf (). For at bruge en positionspecifikator med en dynamisk bredde eller præcision skal du forsyne tælle $ efter * i formatstrengen. For eksempel, "% 3 $ * 2 $. * 1 $ S". Når I / O omdirigeres fra enten Print eller printf ind i en fil eller via getline fra en fil, gawk genkender visse specielle filnavne internt. Disse filnavne tillader adgang til åbne filbeskrivelser, der er arvet fra gawk s overordnede proces (normalt skalen). Disse filnavne kan også bruges på kommandolinjen for at navngive datafiler. Filnavnet er: / Dev / stdin Standardindgangen. / Dev / stdout Standard output. / Dev / stderr Standard fejl output. / Dev / fd / n Filen er forbundet med den åbne filbeskrivelse n . Disse er særligt nyttige til fejlmeddelelser. For eksempel: print "du blæste det!" > "/ dev / stderr" mens du ellers skulle bruge print "du blæste det!" | "kat 1> & 2" Følgende specielle filnavne kan bruges sammen med |& co-process operatør til oprettelse af TCP / IP-netværksforbindelser. / Inet / tcp / lport / rhost / rport Fil til TCP / IP-forbindelse på lokal port lport til fjern vært rhost på fjernporten rport . Brug en havn af 0 at få systemet til at vælge en port. / Inet / UDP / lport / rhost / rport Lignende, men brug UDP / IP i stedet for TCP / IP. / Inet / rå / lport / rhost / rport Reserveret til fremtidig brug. Andre specielle filnavne giver adgang til oplysninger om kørslen gawk behandle. Disse filnavne er nu forældede. Brug PROCINFO array for at få de oplysninger, de giver. Filnavnet er: / Dev / pid Når du læser denne fil, returneres proces-ID'en for den aktuelle proces i decimaltal, afsluttet med en ny linje. / Dev / ppid Når du læser denne fil, returneres det overordnede proces-id for den aktuelle proces, i decimaltal, afsluttet med en ny linje. / Dev / pgrpid Når du læser denne fil, returneres procesgruppens id for den aktuelle proces, i decimaltal, afsluttet med en ny linje. / Dev / bruger Når du læser denne fil, returneres en enkelt rekord, der afsluttes med en ny linje. Feltene er adskilt med mellemrum. $1 er værdien af getuid (2) systemopkald, $2 er værdien af geteuid (2) systemopkald, $3 er værdien af getgid (2) systemopkald og $4 er værdien af getegid (2) systemopkald. Hvis der er yderligere felter, er de gruppens id'er returneret af getgroups (2). Flere grupper understøttes muligvis ikke på alle systemer. AWK har følgende indbyggede aritmetiske funktioner: ARCTAN2 ( y , x ) Returnerer arctangenten af y / x i radianer. cos ( expr ) Returnerer cosinus af expr , som er i radianer. exp ( expr ) Den eksponentielle funktion. int ( expr ) Afkortes til heltal. log ( expr ) Den naturlige logaritme funktion. rand () Returnerer et tilfældigt tal mellem 0 og 1. synd( expr ) Returnerer sinus af expr , som er i radianer. sqrt ( expr ) Kvadratroden funktionen. srand ( expr ) Anvendelser expr som et nyt frø til tilfældig talgeneratoren. Hvis nej expr er angivet, bruges tid på dagen. Returværdien er den tidligere frø for tilfældig talgeneratoren. Gawk har følgende indbyggede strengfunktioner: asort ( s , d ) Returnerer antallet af elementer i kildearrayet s . Indholdet af s er sorteret ved hjælp af gawk 's normale regler for sammenligning af værdier og indekserne for de sorterede værdier af s erstattes med sekventielle heltal, der starter med 1. Hvis den valgfrie destinationsgruppe d er angivet, så s er først dupliceret i d , og så d er sorteret, efterlader indekserne i kildearrayet s uændret. gensub ( r , s , h , t ) Søg efter målstrengen t for matches i det regulære udtryk r . Hvis h er en streng der begynder med g eller G, og erstatt derefter alle matches af r med s . Ellers, h er et tal, der angiver hvilken kamp af r at erstatte. Hvis t leveres ikke, $0 bruges i stedet. Inden for erstatningsteksten s , sekvensen n , hvor n er et ciffer fra 1 til 9, kan bruges til at angive kun den tekst, der matchede n den parenteserede subekspression. Sekvensen 0 repræsenterer hele den matchede tekst, ligesom tegnet &. I mods
Beskrivelse
Valgformat
Muligheder
Variabler, Records og Fields
Records
Felter
Indbyggede variabler
Arrays
Variabel Typing Og Konvertering
Octal og Hexadecimal Konstanter
String Constants
Mønstre og handlinger
Mønstre
Regelmæssige udtryk
Handlinger
Operatører
Kontrolopgørelser
I / O-erklæringer
Udskrivningserklæringen
Særlige filnavne
Numeriske funktioner
Strengfunktioner




