A.W.K. | |
---|---|
Språkklass | scripted , procedural , datadriven |
Framträdde i | 1977 |
Författare | Alfred Aho , Peter Weinberger och Brian Kernighan |
Utvecklaren | Alfred Aho , Brian Kernigan och Peter Weinberger [d] |
Släpp | POSIX.1-2017 |
Typ system | Nej |
Stora implementeringar | awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (kompilator), Awka (kompilator) |
Dialekter | old awk oawk 1977, new awk nawk 1985, GNU Awk gawk |
Blivit påverkad | C , SNOBOL 4, Bourne-skal |
påverkas | Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua |
Mediafiler på Wikimedia Commons |
AWK är ett C - liknande skriptspråk för rad-för-rad- tolkning och bearbetning av en indataström (till exempel en textfil) enligt givna mönster ( reguljära uttryck ). Kan användas i kommandoradsskript .
Namnet AWK består av de första bokstäverna i namnen på utvecklarna av språket - Aho , Weinberger ( eng. Peter J. Weinberger ) och Kernighan . Den första versionen skrevs 1977 på AT&T Bell Laboratories .
AWK behandlar inmatningsströmmen som en lista med poster. Varje post är indelad i fält. Baserat på denna information utförs någon bearbetningsalgoritm som definierats av programmeraren. Som standard är postavgränsaren ett nyradstecken (det vill säga poster är samma som linjer), fältavgränsaren är ett mellanslag eller tabbtecken, eller en sekvens av sådana tecken. Separatortecken kan uttryckligen definieras i programmet. Fältavgränsaren kan också anges på kommandoraden.
Ett AWK-program består av påståenden (regler) som ser ut så här:
mall { action } mall { action } ...Varje post jämförs med alla mönster i tur och ordning, och varje gång den matchar mönstret utförs den angivna åtgärden. Om mallen inte är specificerad utförs åtgärden för varje post. Om ingen åtgärd anges visas posten. AWK har också 2 fördefinierade mallar BEGIN och END . BEGIN exekveras innan inmatningsströmmen bearbetas. END - efter bearbetning av den sista posten av ingångsströmmen.
En åtgärd kan bestå av en sekvens av påståenden separerade med semikolon, en nyrad eller en avslutande parentes.
For-slingan, i en form orienterad mot bearbetning av indexmatriser , ser ut så här:
for ( initieringsavsnitt ; villkorsavsnitt ; uppdateringssektion för iterator ) { Loop body } _ för (associativ form)For-slingan, i en form som är orienterad mot att bearbeta associativa arrayer , ser ut så här:
for ( iterator i array ) { Loop body }Variabel | Innehåll | Standardvärde |
---|---|---|
ARGC | Antal kommandoradsargument | - |
ARGV | Array av kommandoradsargument | - |
MILJÖ | Array som innehåller miljövariabler | - |
FILNAMN | Bearbetad indatafil | - |
FNR | Rekordnummer i den aktuella filen | - |
FS | Registrera fältavgränsare på ingång | mellanslag och/eller flikar |
NF | Antal fält i den aktuella posten | - |
NR | Postnummer (totalt antal lästa poster) | - |
OFMT | Nummerutskriftsformat | %,6g |
OFS | Utdatapostfältseparator (tecken) | mellanslag och/eller flikar |
ORS | Spela in separator i AWK-programutgång (tecken) | \0 |
RS | Inmatningspostavgränsare (tecken) | \0 |
RSTART | Positionen för början av delsträngen som hittas av funktionenmatch | - |
RLENGTH | Längden på delsträngen som hittas av funktionenmatch | - |
SUBSEP | Indexseparator i flerdimensionella arrayer | \034 |
Hej världen! »
BÖRJA { print "Hello World!" ; avsluta }Skriva ut längden på den längsta raden:
{ if ( längd ( $ 0 ) > max ) max = längd ( $ 0 ) } END { print max }Skriv ut alla rader längre än 80 tecken:
{ if ( längd ( $ 0 ) > 80 ) print $ 0 }Skriv ut alla rader som har minst ett fält:
NF > 0Skriva ut antalet rader i en fil:
END { print NR }Skriva ut rader vars nummer är multiplar av 3:
{ if ( FNR % 3 == 0 ) print $ 0 }Skriv ut resten av inmatningsraden efter de tre första fälten:
{ # hitta början av 4:e fältet... match ( $ 0 , /[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]* [ \t]*/ ) # ...skriv ut resten av inmatningssträngen från den hittade positionen print substr ( $ 0 , 1 + RLENGTH ) }Unix-kommandon | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|
Programmeringsspråk | |
---|---|
|