A.W.K. | |
---|---|
Sprog klasse | scriptet , proceduremæssigt , datadrevet |
Dukkede op i | 1977 |
Forfatter | Alfred Aho , Peter Weinberger og Brian Kernighan |
Udvikler | Alfred Aho , Brian Kernigan og Peter Weinberger [d] |
Frigøre | POSIX.1-2017 |
Type system | Ingen |
Større implementeringer | awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compiler), Awka (compiler) |
Dialekter | old awk oawk 1977, new awk nawk 1985, GNU Awk gawk |
Blev påvirket | C , SNOBOL 4, Bourne shell |
påvirket | Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua |
Mediefiler på Wikimedia Commons |
AWK er et C - lignende scriptsprog til linje - for-linje- parsing og behandling af en inputstrøm (for eksempel en tekstfil) i henhold til givne mønstre ( regulære udtryk ). Kan bruges i kommandolinjescripts .
Navnet AWK består af de første bogstaver i navnene på udviklerne af sproget - Aho , Weinberger ( eng. Peter J. Weinberger ) og Kernighan . Den første version blev skrevet i 1977 på AT&T Bell Laboratories .
AWK behandler inputstrømmen som en liste over poster. Hver post er opdelt i felter. Baseret på disse oplysninger udføres en eller anden behandlingsalgoritme defineret af programmøren. Som standard er postseparatoren et nylinjetegn (det vil sige, poster er det samme som linjer), feltseparatoren er et mellemrum eller tabulatortegn eller en sekvens af sådanne tegn. Separatortegn kan defineres eksplicit i programmet. Feltseparatortegnet kan også angives på kommandolinjen.
Et AWK-program består af udsagn (regler), der ser ud som:
skabelon { handling } skabelon { handling } ...Hver post sammenlignes med alle mønstre på skift, og hver gang den matcher mønsteret, udføres den angivne handling. Hvis skabelonen ikke er angivet, udføres handlingen for enhver indtastning. Hvis der ikke er angivet nogen handling , vises posten. AWK har også 2 foruddefinerede skabeloner BEGIN og END . BEGIN udføres før inputstrømmen behandles. END - efter at have behandlet den sidste registrering af inputstrømmen.
En handling kan bestå af en sekvens af udsagn adskilt af et semikolon, en ny linje eller en afsluttende parentes.
For-løkken, i en form orienteret mod behandling af indeks-arrays , ser sådan ud:
for ( initialiseringssektion ; betingelsessektion ; opdatering iteratorafsnit ) { Loop body } _ _ for (associativ form)For-løkken, i en form orienteret mod behandling af associative arrays , ser sådan ud:
for ( iterator i array ) { Loop body }Variabel | Indhold | Standard værdi |
---|---|---|
ARGC | Antal kommandolinjeargumenter | - |
ARGV | Array af kommandolinjeargumenter | - |
MILJØ | Array, der indeholder miljøvariabler | - |
FILNAVN | Behandlet inputfil | - |
FNR | Registrer nummer i den aktuelle fil | - |
FS | Optag feltseparator på input | mellemrum og/eller tabulatorer |
NF | Antal felter i den aktuelle post | - |
NR | Rekordnummer (samlet antal læste poster) | - |
OFMT | Nummerudskriftsformat | %,6g |
OFS | Outputpostfeltseparator (tegn) | mellemrum og/eller tabulatorer |
ORS | Optageseparator i AWK-programoutput (tegn) | \0 |
RS | Input record separator (tegn) | \0 |
RSTART | Placeringen af begyndelsen af understrengen fundet af funktionenmatch | - |
RLENGTH | Længden af understrengen fundet af funktionenmatch | - |
SUBSEP | Indeksseparator i flerdimensionelle arrays | \034 |
Hej verden! »
BEGIN { print "Hej verden!" ; exit }Udskrivning af længden af den længste linje:
{ if ( længde ( $ 0 ) > max ) max = længde ( $ 0 ) } END { print max }Udskriv alle linjer længere end 80 tegn:
{ if ( længde ( $ 0 ) > 80 ) print $ 0 }Udskriv alle linjer, der har mindst ét felt:
NF > 0Udskrivning af antallet af linjer i en fil:
END { print NR }Udskrivning af linjer, hvis tal er multipla af 3:
{ if ( FNR % 3 == 0 ) print $ 0 }Udskriv resten af inputlinjen efter de første tre felter:
{ # find start af 4. felt... match ( $ 0 , /[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]* [ \t]*/ ) # ...udskriv resten af inputstrengen fra den fundne position print substr ( $ 0 , 1 + RLENGTH ) }Unix-kommandoer | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|
Programmeringssprog | |
---|---|
|