AWK - AWK

AWK
Paradigme Scripting , prosessuell , datadrevet
Designet av Alfred Aho , Peter Weinberger og Brian Kernighan
Første gang dukket opp 1977 ; 44 år siden ( 1977 )
Stabil utgivelse
IEEE Std 1003.1-2008 (POSIX) / 1985
Skrive disiplin ingen; kan håndtere strenger, heltall og flytende tall; vanlig uttrykk
OS Kryssplattform
Store implementeringer
awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (kompilator), Awka (kompilator)
Dialekter
gammel awk oawk 1977, ny awk nawk 1985, GNU Awk gawk
Påvirket av
C , sed , SNOBOL
Påvirket
Tcl , AMPL , Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua

AWK ( awk ) er et domenespesifikt språk designet for tekstbehandling og brukes vanligvis som et verktøy for datautvinning og rapportering. Som sed og grep , er det et filter , og er en standardfunksjon i de fleste Unix-lignende operativsystemer .

AWK-språket er et datadrevet skriptspråk som består av et sett med handlinger som skal utføres mot strømmer av tekstdata-enten kjøres direkte på filer eller brukes som en del av en pipeline -for å trekke ut eller transformere tekst, for eksempel å produsere formaterte rapporter. Språket bruker i stor grad datatypen streng , assosiative matriser (det vil si matriser indeksert av nøkkelstrenger) og regulære uttrykk . Selv om AWK har et begrenset tiltenkt applikasjonsdomene og var spesielt designet for å støtte enliners programmer , er språket Turing-komplett , og selv de tidlige Bell Labs-brukerne av AWK skrev ofte godt strukturerte store AWK-programmer.

AWK ble opprettet på Bell Labs på 1970 -tallet, og navnet stammer fra etternavnene til forfatterne: Alfred Aho , Peter Weinberger og Brian Kernighan . Forkortelsen uttales det samme som fugleuk , som er på forsiden av The AWK Programming Language . Når det skrives med små bokstaver, awkrefererer det til Unix- eller Plan 9 -programmet som kjører skript skrevet på AWK -programmeringsspråket.

Historie

AWK ble opprinnelig utviklet i 1977 av Alfred Aho (forfatter av egrep ), Peter J. Weinberger (som jobbet med små relasjonsdatabaser) og Brian Kernighan ; det tar navnet fra deres respektive initialer. I følge Kernighan var et av målene for AWK å ha et verktøy som enkelt ville manipulere både tall og strenger. AWK ble også inspirert av Marc Rochkinds programmeringsspråk som ble brukt til å søke etter mønstre i inndata, og ble implementert ved hjelp av yacc .

Som et av de tidlige verktøyene som ble vist i versjon 7 Unix , la AWK til beregningsfunksjoner til en Unix -rørledning i tillegg til Bourne -skallet , det eneste skriptspråket som er tilgjengelig i et standard Unix -miljø. Det er et av de obligatoriske verktøyene i Single UNIX -spesifikasjonen , og er påkrevd av Linux Standard Base -spesifikasjonen.

AWK ble betydelig revidert og utvidet i 1985–88, noe som resulterte i GNU AWK- implementeringen skrevet av Paul Rubin , Jay Fenlason og Richard Stallman , utgitt i 1988. GNU AWK kan være den mest utbredte versjonen fordi den er inkludert i GNU-baserte Linux -pakker. GNU AWK er opprettholdt utelukkende av Arnold Robbins siden 1994. Brian Kernighan 's nawk (New AWK) kilde først ble utgitt i 1993 unpublicized og offentlig siden slutten av 1990-tallet; mange BSD -systemer bruker den for å unngå GPL -lisensen.

AWK ble innledet av sed (1974). Begge var designet for tekstbehandling. De deler det linjeorienterte, datadrevne paradigmet, og er spesielt egnet til å skrive enlinjeprogrammer , på grunn av den implisitte hovedsløyfen og nåværende linjevariabler. Kraften og terskelen til tidlige AWK-programmer-spesielt den kraftige regulære uttrykkshåndteringen og konsistheten på grunn av implisitte variabler, som letter enliners-sammen med begrensningene til AWK på den tiden, var viktige inspirasjoner for Perl- språket (1987). På 1990-tallet ble Perl veldig populær, og konkurrerte med AWK i nisjen til Unix tekstbehandlingsspråk.

Struktur av AWK -programmer

POSIX awk.pdf

AWK leser inngangen en linje om gangen. En linje skannes for hvert mønster i programmet, og for hvert mønster som matcher, utføres den tilhørende handlingen.

-  Alfred V. Aho

Et AWK -program er en serie mønsterhandlingspar, skrevet som:

condition { action }
condition { action }
...

der tilstand vanligvis er et uttrykk og handling er en rekke kommandoer. Inndataene er delt inn i poster, der poster som standard er atskilt med nye linjetegn, slik at inngangen deles inn i linjer. Programmet tester hver post mot hver av betingelsene etter tur, og utfører handlingen for hvert uttrykk som er sant. Enten tilstanden eller handlingen kan utelates. Tilstanden samsvarer som standard med hver post. Standardhandlingen er å skrive ut posten. Dette er den samme mønster-virkningsstrukturen som sed.

I tillegg til et enkelt AWK -uttrykk, for eksempel foo == 1eller /^foo/, kan tilstanden være BEGINeller ENDforårsake at handlingen utføres før eller etter at alle postene er lest, eller mønster1, mønster2 som samsvarer med rekordområdet som starter med en post som matcher mønster1 opp til og med posten som matcher mønster2 før du igjen prøver å matche mot mønster1 på fremtidige linjer.

I tillegg til normale aritmetiske og logiske operatorer, inkluderer AWK -uttrykk tilde -operatoren ~, som matcher et vanlig uttrykk mot en streng. Som praktisk syntaktisk sukker , / regexp / uten å bruke tilde -operatøren, matcher den gjeldende posten; Denne syntaksen stammer fra sed , som igjen arvet den fra ed editor, der /brukes til å søke. Denne syntaksen for å bruke skråstreker som skilletegn for regulære uttrykk ble senere vedtatt av Perl og ECMAScript , og er nå vanlig. Tilde -operatøren ble også adoptert av Perl.

Kommandoer

AWK -kommandoer er setningene som erstattes av handling i eksemplene ovenfor. AWK -kommandoer kan inneholde funksjonsanrop, variable tildelinger, beregninger eller en hvilken som helst kombinasjon av disse. AWK inneholder innebygd støtte for mange funksjoner; mange flere tilbys av de forskjellige smaker av AWK. Noen smaker støtter også inkludering av dynamisk koblede biblioteker , som også kan gi flere funksjoner.

The print -kommandoen

Den print kommandoen brukes til utskrift tekst. Utdatateksten avsluttes alltid med en forhåndsdefinert streng kalt output record separator (ORS) hvis standardverdi er en ny linje. Den enkleste formen for denne kommandoen er:

print
Dette viser innholdet i gjeldende post. I AWK er poster delt inn i felt , og disse kan vises separat:
print $1
Viser det første feltet i gjeldende post
print $1, $3
Viser det første og tredje feltet i gjeldende post, atskilt med en forhåndsdefinert streng kalt output field separator (OFS) hvis standardverdi er et enkelt mellomromstegn

Selv om disse feltene ( $ X ) kan ha likhet med variabler ($ -symbolet angir variabler i Perl ), refererer de faktisk til feltene i gjeldende post. Et spesialtilfelle, $ 0 , refererer til hele posten. Faktisk er kommandoene " print" og " print $0" identiske i funksjonalitet.

Den trykk kommandoen kan også vise resultatene av beregninger og / eller funksjonskall:

/regex_pattern/ {
    # Actions to perform in the event the record (line) matches the above regex_pattern
    print 3+2
    print foobar(3)
    print foobar(variable)
    print sin(3-2)
}

Utdata kan sendes til en fil:

/regex_pattern/ {
    # Actions to perform in the event the record (line) matches the above regex_pattern
    print "expression" > "file name"
}

eller gjennom et rør :

/regex_pattern/ {
    # Actions to perform in the event the record (line) matches the above regex_pattern
    print "expression" | "command"
}

Innebygde variabler

Awks innebygde variabler inkluderer feltvariablene: $ 1, $ 2, $ 3 og så videre ($ 0 representerer hele posten). De holder teksten eller verdiene i de enkelte tekstfeltene i en post.

Andre variabler inkluderer:

  • NR: Antall poster. Holder en gjeldende telling av antall inngangsposter som er lest så langt fra alle datafiler. Den starter på null, men blir aldri automatisk tilbakestilt til null.
  • FNR: Fil Antall poster. Beholder en gjeldende telling av antall inngangsposter som er lest så langt i den nåværende filen. Denne variabelen nullstilles automatisk hver gang en ny fil startes.
  • NF: Antall felt. Inneholder antall felt i gjeldende inndatapost. Det siste feltet i inndataposten kan angis med $ NF, det nest siste feltet med $ (NF-1), det tredje til siste feltet med $ (NF-2), etc.
  • FILENAME: Inneholder navnet på den gjeldende inndatafilen.
  • FS: Feltskiller. Inneholder "feltseparator" -tegnet som brukes til å dele felt i inndataposten. Standard "hvitt mellomrom" inkluderer alle mellomrom og fanetegn. FS kan tilordnes til et annet tegn for å endre feltseparatoren.
  • RS: Record Separator. Lagrer gjeldende "rekordseparator" -tegn. Siden en inngangslinje som standard er inndataposten, er standardoppføringsseparatortegnet en "ny linje".
  • OFS: Utskillelse av utdatafelt. Lagrer "utskriftsfeltskilletegnet", som skiller feltene når Awk skriver dem ut. Standard er et "mellomrom" -tegn.
  • ORS: Output Record Separator. Lagrer "output record separator", som skiller utgangspostene når Awk skriver dem ut. Standard er et "newline" -tegn.
  • OFMT: Utgående format. Lagrer formatet for numerisk utgang. Standardformatet er "%.6g".

Variabler og syntaks

Variabelnavn kan bruke hvilken som helst av tegnene [A-Za-z0-9_], med unntak av språkord. Operatørene + - * / representerer henholdsvis addisjon, subtraksjon, multiplikasjon og divisjon. For streng sammenkobling , plasserer du bare to variabler (eller strengkonstanter) ved siden av hverandre. Det er valgfritt å bruke et mellomrom hvis strengkonstanter er involvert, men to variabelnavn plassert ved siden av hverandre krever et mellomrom. Dobbel anførselstegn avgrenser strengkonstanter. Uttalelser trenger ikke ende med semikolon. Til slutt kan kommentarer legges til i programmer ved å bruke # som det første tegnet på en linje.

Brukerdefinerte funksjoner

I et format som ligner på C , består funksjonsdefinisjoner av søkeordet function, funksjonsnavnet, argumentnavnene og funksjonsdelen. Her er et eksempel på en funksjon.

function add_three (number) {
    return number + 3
}

Denne uttalelsen kan påberopes som følger:

(pattern)
{
   print add_three(36)     # Outputs '''39'''
}

Funksjoner kan ha variabler som er i det lokale omfanget. Navnene på disse legges til på slutten av argumentlisten, selv om verdier for disse bør utelates når funksjonen kalles. Det er en konvensjon å legge til et mellomrom i argumentlisten før de lokale variablene, for å indikere hvor parameterne slutter og de lokale variablene begynner.

Eksempler

Hei Verden

Her er det vanlige " Hei, verden " -programmet skrevet i AWK:

BEGIN { print "Hello, world!" }

Vær oppmerksom på at en eksplisitt exituttalelse ikke er nødvendig her; siden det eneste mønsteret er BEGIN, blir ingen kommandolinjeargumenter behandlet.

Skriv ut linjer som er lengre enn 80 tegn

Skriv ut alle linjene som er lengre enn 80 tegn. Vær oppmerksom på at standardhandlingen er å skrive ut gjeldende linje.

length($0) > 80

Telle ord

Tell ord i input og skriv ut antall linjer, ord og tegn (som wc ):

{
    words += NF
    chars += length + 1 # add one to account for the newline character at the end of each record (line)
}
END { print NR, words, chars }

Siden det ikke er noe mønster for den første linjen i programmet, samsvarer hver linje med input som standard, så trinnene blir utført for hver linje. Merk at det words += NFer stenografi for words = words + NF.

Sum siste ord

{ s += $NF }
END { print s + 0 }

s økes med den numeriske verdien til $ NF , som er det siste ordet på linjen som definert av AWKs feltseparator (som standard, mellomrom). NF er antall felt på den gjeldende linjen, f.eks. 4. Siden $ 4 er verdien til det fjerde feltet, er $ NF verdien av det siste feltet på linjen, uavhengig av hvor mange felt denne linjen har, eller om den har flere eller færre felt enn omkringliggende linjer. $ er faktisk en unarisk operatør med den høyeste operatørprioriteten . (Hvis linjen ikke har noen felt, er NF 0, $ 0 er hele linjen, som i dette tilfellet er tom bortsett fra mulig mellomrom, og det samme har den numeriske verdien 0.)

På slutten av inngangen samsvarer END -mønsteret, så s skrives ut. Siden det imidlertid kanskje ikke har vært noen inngangslinjer i det hele tatt, i så fall har det aldri blitt tildelt noen verdi til s , vil det som standard være en tom streng. Å legge null til en variabel er et AWK -formspråk for å tvinge den fra en streng til en numerisk verdi. (Å sammenkoble en tom streng er å tvinge fra et tall til en streng, f.eks. S "" . Merk, det er ingen operatør for å sammenkoble strenger, de er bare plassert ved siden av hverandre.) Med tvangen skriver programmet ut "0" på en tom inngang , uten det skrives det ut en tom linje.

Match en rekke inngangslinjer

NR % 4 == 1, NR % 4 == 3 { printf "%6d  %s\n", NR, $0 }

Handlingserklæringen skriver ut hver linje nummerert. Printf -funksjonen emulerer standard C printf og fungerer på samme måte som utskriftskommandoen beskrevet ovenfor. Mønsteret som matcher fungerer imidlertid som følger: NR er antall poster, vanligvis linjer med inngang, AWK har lest så langt, dvs. det gjeldende linjenummeret, som starter med 1 for den første inngangslinjen. % er modulo -operatøren. NR % 4 == 1 er sant for 1., 5., 9., etc., inngangslinjer. På samme måte er NR % 4 == 3 sant for inngangslinjene 3., 7., 11. osv. Områdemønsteret er falskt til den første delen samsvarer, på linje 1, og forblir så sann til og med når den andre delen samsvarer, på linje 3. Den forblir deretter usann til den første delen samsvarer igjen på linje 5.

Dermed skriver programmet ut linjer 1,2,3, hopper over linje 4, og deretter 5,6,7, og så videre. For hver linje skrives det ut linjenummeret (på et felt på 6 tegn) og deretter linjeinnholdet. For eksempel når den kjøres på denne inngangen:

Rome
Florence
Milan
Naples
Turin
Venice

Det forrige programmet skriver ut:

     1 Rome
     2 Florence
     3 Milan
     5 Turin
     6 Venice

Skriver ut den første eller siste delen av en fil

Som et spesielt tilfelle, når den første delen av et områdemønster konstant er sant, f.eks. 1 , vil området starte ved begynnelsen av inngangen. På samme måte, hvis den andre delen er konstant usann, f.eks. 0 , vil området fortsette til slutten av inngangen. For eksempel,

 /^--cut here--$/, 0

skriver ut inndatalinjer fra den første linjen som matcher det vanlige uttrykket ^ -klipp her- $ , det vil si en linje som bare inneholder uttrykket "--cut here--", til slutten.

Beregn ordfrekvenser

Ordfrekvens ved hjelp av assosiative matriser :

BEGIN {
    FS="[^a-zA-Z]+"
}
{
    for (i=1; i<=NF; i++)
        words[tolower($i)]++
}
END {
    for (i in words)
        print i, words[i]
}

BEGIN-blokken setter feltseparatoren til en hvilken som helst sekvens av ikke-alfabetiske tegn. Vær oppmerksom på at skilletegn kan være vanlige uttrykk. Etter det kommer vi til en bar handling, som utfører handlingen på hver inngangslinje. I dette tilfellet, for hvert felt på linjen, legger vi til et antall ganger det ordet, først konvertert til små bokstaver, vises. Til slutt, i END -blokken, skriver vi ut ordene med frekvensene. Køen

for (i in words)

danner en løkke som går gjennom oppstillings ord , sette i hver indeks i matrisen. Dette er forskjellig fra de fleste språk, der en slik sløyfe går gjennom hver verdi i matrisen. Sløyfen skriver dermed ut hvert ord etterfulgt av frekvensantallet. tolowervar et tillegg til One True awk (se nedenfor) gjort etter at boken ble utgitt.

Match mønster fra kommandolinjen

Dette programmet kan representeres på flere måter. Den første bruker Bourne -skallet til å lage et skallskript som gjør alt. Det er den korteste av disse metodene:

#!/bin/sh

pattern="$1"
shift
awk '/'"$pattern"'/ { print FILENAME ":" $0 }' "$@"

Kommandoen $patternin the awk er ikke beskyttet av enkle anførselstegn, slik at skallet utvider variabelen, men det må settes i doble anførselstegn for å håndtere mønstre som inneholder mellomrom. Et mønster i seg selv på vanlig måte sjekker om hele linjen ( $0) stemmer. FILENAMEinneholder gjeldende filnavn. awk har ingen eksplisitt sammenkoblingsoperatør; to tilstøtende strenger sammenkobler dem. $0utvides til den opprinnelige uendrede inndatalinjen.

Det er alternative måter å skrive dette på. Dette skallskriptet får tilgang til miljøet direkte fra awk:

#!/bin/sh

export pattern="$1"
shift
awk '$0 ~ ENVIRON["pattern"] { print FILENAME ":" $0 }' "$@"

Dette er et skallskript som bruker ENVIRON, en matrise introdusert i en nyere versjon av One True awk etter at boken ble utgitt. Abonnementet på ENVIRONer navnet på en miljøvariabel; resultatet er variabelens verdi. Dette er som getenv -funksjonen i forskjellige standardbiblioteker og POSIX . Shell -skriptet lager en miljøvariabel som patterninneholder det første argumentet, og deretter slipper det argumentet og har et awk -utseende etter mønsteret i hver fil.

~sjekker om venstre operand samsvarer med høyre operand; !~er dens omvendte. Vær oppmerksom på at et vanlig uttrykk bare er en streng og kan lagres i variabler.

Den neste måten bruker kommandolinjevariabel tildeling, der et argument til awk kan ses som en tildeling til en variabel:

#!/bin/sh

pattern="$1"
shift
awk '$0 ~ pattern { print FILENAME ":" $0 }' "pattern=$pattern" "$@"

Eller du kan bruke kommandolinjealternativet -v var = value (f.eks. Awk -v mønster = "$ mønster" ... ).

Til slutt er dette skrevet i ren awk, uten hjelp fra et skall eller uten at du trenger å vite for mye om implementeringen av awk -skriptet (som variabeloppgaven på kommandolinje man gjør), men er litt lang:

BEGIN {
    pattern = ARGV[1]
    for (i = 1; i < ARGC; i++) # remove first argument
        ARGV[i] = ARGV[i + 1]
    ARGC--
    if (ARGC == 1) { # the pattern was the only thing, so force read from standard input (used by book)
        ARGC = 2
        ARGV[1] = "-"
    }
}
$0 ~ pattern { print FILENAME ":" $0 }

Det BEGINer nødvendig ikke bare for å trekke ut det første argumentet, men også for å forhindre at det blir tolket som et filnavn etter at BEGINblokken er avsluttet. ARGC, antallet argumenter, er alltid garantert ≥1, det samme ARGV[0]er navnet på kommandoen som utførte skriptet, oftest strengen "awk". Merk også at ARGV[ARGC]er den tomme strengen, "". #starter en kommentar som utvides til slutten av linjen.

Legg merke til ifblokken. awk sjekker bare om den skal lese fra standardinngang før den kjører kommandoen. Dette betyr at

awk 'prog'

fungerer bare fordi det faktum at det ikke er noen filnavn bare blir sjekket før progdet kjøres! Hvis du eksplisitt setter ARGCtil 1 slik at det ikke er noen argumenter, vil awk ganske enkelt slutte fordi det føles at det ikke er flere inndatafiler. Derfor må du eksplisitt si å lese fra standardinngang med det spesielle filnavnet -.

Selvstendige AWK-skript

På Unix-lignende operativsystemer kan selvstendige AWK-skript konstrueres ved hjelp av shebang- syntaksen.

For eksempel kan et skript som skriver ut innholdet i en gitt fil, bygges ved å opprette en fil print.awkmed følgende innhold:

#!/usr/bin/awk -f
{ print $0 }

Det kan påberopes med: ./print.awk <filename>

Den -fforteller AWK at argumentet som følger er filen du vil lese AWK -programmet fra, som er det samme flagget som brukes i sed. Siden de ofte brukes til one-liners, bruker begge disse programmene som standard å kjøre et program gitt som et kommandolinjeargument, i stedet for en egen fil.

Versjoner og implementeringer

AWK ble opprinnelig skrevet i 1977 og distribuert med versjon 7 Unix .

I 1985 begynte forfatterne å utvide språket, mest vesentlig ved å legge til brukerdefinerte funksjoner. Språket er beskrevet i boken The AWK Programming Language , utgitt 1988, og gjennomføringen ble gjort tilgjengelig i versjoner av UNIX System V . For å unngå forvirring med den inkompatible eldre versjonen, ble denne versjonen noen ganger kalt "new awk" eller nawk . Denne implementeringen ble utgitt under en gratis programvarelisens i 1996 og vedlikeholdes fortsatt av Brian Kernighan (se eksterne lenker nedenfor).

Gamle versjoner av Unix, for eksempel UNIX/32V , inkludert awkcc, som konverterte AWK til C. Kernighan skrev et program for å gjøre awk til C ++; tilstanden er ikke kjent.

  • BWK awk , også kjent som nawk , refererer til versjonen av Brian Kernighan . Det har blitt kalt "One True AWK" på grunn av bruken av begrepet i forbindelse med boken som opprinnelig beskrev språket og det faktum at Kernighan var en av de opprinnelige forfatterne av AWK. FreeBSD omtaler denne versjonen som one-true-awk . Denne versjonen har også funksjoner som ikke er i boken, for eksempel tolowerog ENVIRONsom er forklart ovenfor; se FIXES -filen i kildearkivet for detaljer. Denne versjonen brukes av for eksempel Android , FreeBSD , NetBSD , OpenBSD , macOS og illumos . Brian Kernighan og Arnold Robbins er de viktigste bidragsyterne til et kildeoppbevaringssted for nawk : github .com /onetrueawk /awk .
  • gawk ( GNU awk) er en annen implementering av gratis programvare og den eneste implementeringen som gjør alvorlige fremskritt med å implementere internasjonalisering og lokalisering og TCP/IP-nettverk. Den ble skrevet før den opprinnelige implementeringen ble fritt tilgjengelig. Den inneholder sin egen feilsøkingsprogram, og profilen gjør det mulig for brukeren å gjøre målte ytelsesforbedringer til et skript. Det gjør det også mulig for brukeren å utvide funksjonaliteten med delte biblioteker. Noen Linux -distribusjoner inkluderer gawk som standard AWK -implementering.
    • gawk-csv . Den CSV forlengelse av gawk gir fasiliteter for håndtering av inn- og utgangs CSV-formaterte data.
  • mawk er en veldig rask AWK -implementering av Mike Brennan basert på en bykodetolk .
  • libmawk er en gaffel av mawk, slik at applikasjoner kan bygge inn flere parallelle forekomster av awk -tolker.
  • awka (hvis frontend er skrevet på toppen av mawk -programmet) er en annen oversetter av AWK -skript til C -kode. Når de er kompilert, statisk inkludert forfatterens libawka.a, blir de resulterende kjørbare filene betraktelig raskere, og i henhold til forfatterens tester sammenligner de seg veldig godt med andre versjoner av AWK, Perl eller Tcl . Små skript blir til programmer på 160–170 kB.
  • tawk (Thompson AWK) er en AWK -kompilator for Solaris , DOS , OS/2 og Windows , som tidligere ble solgt av Thompson Automation Software (som har avsluttet virksomheten).
  • Jawk er et prosjekt for å implementere AWK i Java , vert på SourceForge. Utvidelser til språket legges til for å gi tilgang til Java -funksjoner i AWK -skript (dvs. Java -tråder, sockets, samlinger, etc.).
  • xgawk er en gaffel av gawk som strekker seg gawk med dynamisk last biblioteker. XMLgawk -utvidelsen ble integrert i den offisielle GNU Awk -versjonen 4.1.0.
  • QSEAWK er en innebygd AWK -tolkimplementering inkludert i QSE -biblioteket som tilbyr innebygd programmeringsgrensesnitt (API) for C og C ++ .
  • libfawk er en veldig liten, funksjonell, reentrant, innebygd tolk skrevet i C
  • BusyBox inkluderer en AWK -implementering skrevet av Dmitry Zakharov. Dette er en veldig liten implementering egnet for innebygde systemer.
  • CLAWK av Michael Parker gir en AWK -implementering i Common Lisp , basert på det vanlige uttrykksbiblioteket til samme forfatter.

Bøker

  • Aho, Alfred V .; Kernighan, Brian W .; Weinberger, Peter J. (1988-01-01). AWK -programmeringsspråket . New York, NY: Addison-Wesley . ISBN 0-201-07981-X. Hentet 2017-01-22 .
  • Robbins, Arnold (2001-05-15). Effektiv awk -programmering (3. utg.). Sebastopol, CA: O'Reilly Media . ISBN 0-596-00070-7. Hentet 2009-04-16 .
  • Dougherty, Dale ; Robbins, Arnold (1997-03-01). sed & awk (2. utg.). Sebastopol, CA: O'Reilly Media. ISBN 1-56592-225-5. Hentet 2009-04-16 .
  • Robbins, Arnold (2000). Effektiv Awk -programmering: En brukerhåndbok for Gnu Awk (1.0.3 utg.). Bloomington, IN: iUniverse . ISBN 0-595-10034-1. Arkivert fra originalen 12. april 2009 . Hentet 2009-04-16 .

Se også

Referanser

Videre lesning

Eksterne linker