AWK

AWKi käsud

AWKi käsud on laused, mis tohivad eelnevates näidetes olla tegevuse asemel. AWKi käskudeks on funktsioonide väljakutsed, muutujate väärtustamine, arvutused ja eelnevate kombinatsioonid. AWKi on sisse ehitatud mitme funktsiooni tugi ja AWKi eri versioonid pakuvad neile rikkalikku lisa.
Lihtsuse huvides on järgmistes näidetes ära jäetud looksulud.

Muutujad ja süntaks

Muutujanimed võivad sisaldada kõiki ladina suur- ja väiketähti, numbreid ja allkriipsu, kuid muutujanimena ei tohi kasutada AWKi võtmesõnu.
Tehtemärgid +, -, *  ja / tähistavad vastavalt liitmist, lahutamist, korrutamist ja jagamist. Sõnede liitmiseks (sidurdamiseks) tuleb kaks muutujat või sõnekonstanti teineteise järele kirjutada. Sõnekonstantide vahelt tohib tühiku ära jätta, kuid kahe muutuja liitmisel tuleb nende vahele kindlasti tühik kirjutada. Sõnekonstante eraldatakse ja tähistatakse jutumärkidega.
Programmilausete lõppu ei pea panema semikoolonit.
Kommentaare võib programmi lisada, kasutades #-märki rea alguses.

Sisendist loetud sõnade arvu väljastamine

Loendada sisendist tulevaid sõnu ning väljastada ridade, sõnade ja sümbolite arv (nagu "wc" ehk "word count" käsk UNIXis):
{
    w += NF
    c += length + 1
}
END { print NR, w, c }
Kuna programmi esimeses reas pole antud mustrit, siis vaikimisi sobib iga sisendrida ja järgmised käsud täidetakse kõikidel ridadel.
w += NF on lühendatud variant ja tähendab sama mis w = w + NF.

Viimaste sõnade liitmine

{ s += $NF }
END { print s + 0 }
s-i suurendatakse NF-i võrra, mis on sisendirea viimase sõna (välja) järjekorranumber selles reas. Näiteks $4 tähistab 4. välja väärtust, siis $NF tähistab viimast välja olenemata sellest, mitu välja reas on (võib olla nii rohkem kui vähem kui eelnevates/järgnevates ridades). Dollarimärk $ on unaarne tehtemärk kõrgeima prioriteediga. Kui sisendreas pole ühtegi välja, siis NF väärtus on 0 ning $0, mis tähistab tervet rida, on tühi ja selle väärtus on samuti 0.
Pärast kogu sisendi lugemist sobitub END-muster ja seejärel väljastatakse s. Kuid sisendis ei pruukinud olla ühtegi rida, mis tähendab, et s ei väärtustunud ja seega s väärtus on tühi sõne. Nulli liitmine muutuja väärtusele on AWKi eripära sõne numbriliseks muutmiseks. Tühja sõne ja muutujate liitmist kasutatakse numbrilise väärtuse sõneks muutmiseks, näiteks s "". Sõnede liitmiseks pole operaatorit vaja, nad asetatakse lihtsalt järjest. Nulli liitmise tõttu väljastab programm 0, vastasel juhul oleks väljastatud tühi rida.

Seesmised AWK skriptid

Nagu mitmes teises programmeerimiskeeles, saab ka AWK-s konstrueerida seesmisi skripte nn "shebang" (UNIXi) süntaksi abil.
Näiteks UNIXi käsu hello.awk, mis väljastab sõne "Tere, maailm!", võib tekitada, luues faili nimega hello.awk, mis sisaldab järgmisi ridu:
#!/usr/bin/awk -f
BEGIN { print "Tere, maailm!" }
-f ütleb awkile, et järgnev argument on fail, millest tuleb lugeda AWK programm.

AWK versioonid ja realisatsioonid

AWK kirjutati levitati algselt UNIXi 7. versiooniga. 1985 hakkasid autorid keelt laiendama, põhiliselt kasutaja defineeritud funktsioonide lisamisega. AWK-d kirjeldatakse raamatus "The AWK Programming Language", mis avaldati 1988. Selle keele realisatsioonid olid kättesaadavad alates UNIXi System V-st. Et vältida arusaamatusi mitteühilduva vanema versiooniga, teatakse seda versiooni nime all "uus awk" ehk nawk. See realisatsioon oli kättesaadav vabavaraliselt alates 1996 ja seda haldab veel ikka Brian Kernighan.
Vanemad versioonid UNIXist (nagu näiteks UNIX/32V), koosseisus oli awkcc, mis teisendasid AWKi C-sse. Kernighan kirjutas programmi, millega sai teisendada AWKi C++-sse, kuid selle seisukord ei ole teada.
BWK awk viitab Brian Kernighani versioonile. Seda on nimetatud ainsaks tõeliseks AWKiks (One True AWK), sest seda mõistet seostatakse raamatuga, mis algselt kirjeldas AWKi, ja ka fakti pärast, et Kernighan oli üks AWKi loojatest . FreeBSD viitab kõnealusele versioonile sama nimega (one-true-awk . Selles versioonis on ka võimalusi, mida raamatus pole kirjeldatud, näiteks tolower ja ENVIRON, mis on eelnevalt selgitatud. Lisateavet vaata failist FIXES allikate loetelus. BWK awki kasutavad näiteks FreeBSD, NetBSD ja MacOS X.
gawk (GNU awk) on järjekordne tasuta tarkvara realisatsioon. See võimaldab kasutajal funktsionaalsust laiendada kasutaja kirjutatud teekide abil. See kirjutati enne, kui algne realisatsioon vabalt kättesaadavaks sai ja on siiani laialdaselt kasutusel. Mitmel Linuxil on uusim gawki versioon ja seda tunnustatakse awki de facto realisatsioonina Linuxi maailmas. gawki versioon 3.0 oli awki nime all FreeBSDs enne versiooni 5.0. Järgnenud FreeBSD versioonid kasutasid BWK awki, et vältida GNU GPLi .
mawk on väga kiire AWKi realisatsioon, mille autor on Mike Brennan. See põhineb baitkoodi interprataatoril.
awka, mille algusosa on kirjutatud programmile mawk, on veel üks translaator, mis teisendab AWKi skripte C-sse. Pärast kompileerimist (autori libawk.a lisamist) saadud käivitatavad failid on oluliselt kiiremad ja autori testide põhjal võrreldavad AWKi teiste versioonide, Perli ja Tcliga. Väikesed skriptid teisenevad programmideks suurusega 160–170 kB.
tawk (Thompson AWK) on AWKi kompilaator Solarisele, MS-DOSile, OS/2le ja Windowsile, mida varem müüs Thompson Automation Software. See ettevõte on oma tegevuse lõpetanud.
Jawk on SourceForge'i projekt AWKi realiseerimiseks Javas. Keelele on lisatud laiendused, et tagada AWKi skriptidest juurdepääs Java võimalustele (näiteks Java lõimed, Collections jne).
xgawk on SourceForge'i projekt, mis põhineb gawkil . See laiendab gawki dünaamiliselt laetavate teekidega.
QSEAWK on sisene AWKi interpretaatori realisatsioon, mis sisaldub QSE teegis, mis omakorda tagab API C ja C++ jaoks.
BusyBox sisaldab hõredalt dokumenteeritud AWKi realisatsiooni, mis paistab olevat täielik, autoriks Dmitri Zahharov. See on väga väike realisatsioon, mis sobib sisestele süsteemidele.