A parancssor magának a gawk -nak adandó paraméterekből, az AWK program szövegéből (ha nem a -f vagy --file opciók segítségével adjuk meg), valamint - később az ARGC és ARGV előre definiált AWK változókkal elérhető - értékekből áll.
A gawk opciók lehetnek a POSIX-féle hagyományos egybetűs opciók, vagy a GNU stílusú hosszú opciók. A POSIX stílusú opciók szimpla kötőjellel (``-''), míg a GNU hosszú opciói dupla kötőjellel (``--'') kezdődnek. Egyaránt GNU stílusú hosszú opciókkal vannak ellátva a GNU- specifikus és a POSIX-ban előírt szolgáltatások. Az AWK nyelv egyéb megvalósításai valószínűleg csak a hagyományos egybetűs opciókat fogadják el.
Követve a POSIX szabványt a gawk specifikus opciókat a -W paraméterrel lehet megadni. Megadhatunk több -W paramétert, vagy egyet több argumentummal. Utóbbi esetben az argumentumokat vesszővel kell elválasztani; vagy whitespace-szel, és zárójelek közé tenni. A kis-/nagybetűk egyenértékűek a -W opció argumentumaiban. Mindegyik -W opciónak megvan a maga GNU stílusú párja (ld. lejjebb). A GNU stílusú opciók argumentumait vagy az opcióval = jellel összekötve (közbülső space-ek nélkül), vagy mint a következő parancssori paramétert kell megadni. A hosszú opciók rövidíthetők mindaddig, amíg a rövidítés egyedi marad.
A gawk a következő opciókat fogadja el:
Kompatíbilis módban a program minden egyéb opciót illegálisként jelöl meg, egyébként figyelmen kívül hagyja azokat. Rendes működéskor, mindaddig, amíg szöveget talál, az ismeretlen opciókat feldolgozásra átadja az AWK programnak az ARGV tömbben. Ez különösen az AWK programok ``#!'' mechanizmussal történő futtatásakor hasznos.
minta { tevékenység utasítások }
function név(fIparaméter lista) { utasítások }
A gawk először beolvassa a programforrást a programfile -(ok)ból (ha meg van adva ilyen), a --source argumentumából, vagy a parancssor első, nem-opció argumentumából. A -f és a --source opciók többször használhatók a parancssorban. A gawk ilyenkor úgy olvassa be a program szövegét, mintha minden programfile és parancssori forrásszöveg össze volna kapcsolva (konkatenálva). Ez jól használható AWK függvénykönyvtárak kialakításához. Így nincs szükség a függvények befoglalására minden olyan új programba, amely használja azokat. Ez azt is lehetővé teszi, hogy a könyvtári függvényeket a parancssori programokkal keverjük.
Az AWKPATH környezeti változó előírja a -f opcióval megnevezett fájlok keresési útvonalát. Ha ez a változó nem létezik, az alapértelmezett keresési útvonal: ".:/usr/local/share/awk". (A tényleges könyvtár aszerint változhat, hogy a gawk -ot hogyan fordították és installálták.) Amennyiben egy, a -f opcióval átadott fájlnév ``/'' karaktert tartalmaz, nem hajtódik végre útvonal-keresés.
A gawk a következő forgatókönyv szeint hajtja végre a programokat. Először végrehajt minden, a -v opcióval előírt változó-értékadást. Ezután egy belső formába fordítja a programot, végrehajtja a BEGIN blokk(ok)ban levő kódot (ha van ilyen), majd beolvas minden, az ARGV tömbben megadott fájlt. Ha nincs file megnevezve a parancssorban, a gawk a standard bemenetet olvassa.
Ha egy, a parancssorban megadott fájlnév var = val formájú, akkor ezt a gawk változó-értékadásként kezeli; a var változó megkapja a val értéket. (Ez azután történik, hogy minden BEGIN block lefutott.) A parancssori értékadás ott a leghasznosabb, ahol olyan változók értékeit adjuk meg dinamikusan, amelyek azt írják elő, hogy a bemenetet milyen módon kell mezőkre és rekordokra bontani. Ez állapot figyelésre is alkalmas, ha több futás is szükséges egyetlen adatfile-on.
Ha az ARGV egy bizonyos eleme üres értékű (""), a gawk átugorja azt.
A gawk ellenőrzi a bemenet minden rekordját, hogy eldöntse, illeszkedik-e az AWK program bármely mintájára . Minden olyan mintához rendelt tevékenység végrehajtódik, amely mintára a rekord illeszkedik. A minták a programbeli előfordulás sorrendjében kerülnek vizsgálat alá.
Végül, miután minden bemenetnek a végére ért, a gawk végrehajtja az END blokk(ok)ban lévő kódot (ha van ilyen).
Amint beolvassa az egyes rekordokat, a gawk mezők -re bontja azokat, az FS változó értékét használva mezőelválasztóként. Ha FS egyetlan karakter, ez a karakter választja el a mezőket. Ha FS üres sztring, akkor minden egyes karakter külön mező lesz. Egyébként a program FS -t, mint reguláris kifejezést kezeli. Abban a speciális esetben, amikor FS egyetlen space, a mezőket space és/vagy tab és/vagy újsor karakterek választják el. (De lásd lejjebb a --posix opció tárgyalását). Fontos, hogy az IGNORECASE értéke (lásd lejjebb) szintén befolyásolja, hogy a mezők miként választódnak szét, amikor az FS reguláris kifejezés; és hogy hogyan szeparálódnak a rekordok, amikor az RS reguláris kifejezés.
Ha a FIELDWIDTHS változó értékeként space-ekkel elválasztott számlista van megadva, a gawk fix szélességű mezőket vár, és a rekordot az adott szélességekre darabolja. Az FS értékét figyelmen kívül hagyja. FS -nek új értéket adva a FIELDWIDTHS használata megszüntethető, és visszaállítható az alapértelmezett működés.
A bemeneti rekord minden mezőjére pozíciója alapján hivatkozhatunk ( $1 , $2 , stb.) $0 az egész rekord. A mező értéke meg is adható. A mezőhivatkozásnak nem szükséges konstansnak lennie:
n = 5
print $n
kiírja a bemeneti rekord ötödik mezőjét. Az NF változó a bemeneti rekord mezőinek számát tartalmazza.
A nemlétező mezőkre történő hivatkozások (azaz $NF -nél nagyobb indexű mezők) üres sztringet eredményeznek. Azonban a nemlétező mezőnek történő értékadás (pl. $(NF+2) = 5 ) megnöveli NF értékét, minden közbeeső mezőt üres sztringértékkel hoz létre, és $0 értékét újra kiértékelteti úgy, hogy a mezőelválasztó OFS értéke lesz. A negatív mezőhivatkozások fatális hibát okoznak. NF dekrementálása az új érték utáni mezők értékének elvesztésével jár, valamint $0 értékének újraszámítását okozza, OFS értékének megfelelő mezőelválasztással.
A gawk beépített változói:
A tömbök indexei szögletes zárójelben ( [ és ] ). megadott kifejezések. Ha a kifejezés egy kifejezéslista ( kif ", " kif " ...)" akkor a tömbindex az egyes kifejezések (sztring)értékének konkatenációjából álló sztring, ahol az egyes részeket a SUBSEP változó értéke szerinti karakter választja el. Például:
a "hello, world\n" sztringet rendeli az x tömb "A\034B\034C" sztringgel indexelt eleméhez. az AWK-ban minden tömb asszociatív, azaz sztringekkel indexelt.
Az in , különleges operátor használható if és while utasításban annak eldöntésére, hogy egy tömbben létezik-e egy adott értékből álló index.
if (val in array) print array[val]
Ha a tömb többindexű, az (i, j) in array forma alkalmazandó.
Az in szerkezet for ciklusban is használható egy tömb minden elemének eléréséhez.
Egy tömbelem a delete utasítással törölhető. A delete a tömb teljes tartalmának törlésére is használható, a tömbnév index nélküli megadásával.
A változók és mezők lehetnek (lebegőpontos) számok, sztringek, vagy mindkettő. A változó értékének kezelése a környezetétől függ. Ha numerikus kifejezésben szerepel, számként lesz kezelve, ha sztringként használják, akkor sztringként.
Ha kényszeríteni szeretnénk, hogy egy változó számként legyen kezelve, adjunk hozzá 0-t; ha azt akarjuk, hogy sztringként, konkatenáljuk az üres sztringgel.
Ha egy sztringet számmá kell konvertálni, a konverzió az atof (3) függvénnyel valósul meg. Egy szám sztringgé konvertálódik, ha a CONVFMT értékét, mint az sprintf (3) függvény formázó sztringjét használjuk, argumentumként pedig a változó számértékét adjuk meg. Azonban, jóllehet az AWK-ban minden szám lebegőpontos, az egész értékek mindig integer-szerűen konvertálódnak. Így
CONVFMT = "%2.2f" a = 12 b = a ""
a b változó sztringértéke "12" és nem "12.00".
A gawk a következőképpen hajtja végre az összehasonlítást: ha két változó numerikus, numerikusan hasonlít össze. Ha az egyik érték numerikus és a másik sztringérték, amely ``numerikus sztring'', akkor az összehasonlítás szintén numerikusan történik. Egyébként a numerikus érték sztringgé konvertálódik és sztring-összehasonlítás hajtódik végre. Két sztring, természetesen sztringként hasonlítódik össze. A POSIX szabvány szerint, akkor is numerikus összehasonlítást kell végezni, ha két sztring numerikus sztring. Azonban ez teljesen helytelen, és a gawk nem ezt teszi.
Fontos, hogy a sztring konstansok, úgy mint az "57", nem numerikus sztringek; ezek sztring konstansok. A ``numerikus sztring'' fogalom csak a mezőkre, a getline bemenetre, a FILENAME -re, az ARGV elemekre, az ENVIRON elemekre és a split() függvénnyel létrehozott tömb numerikus sztring elemeire vonatkozik. Az alapgondolat az, hogy a numerikus alakú felhasználói bemenetet, és csak a felhasználói bemenetet szabad így kezelni.
Az inicializálatlan változók numerikus érteke 0, sztringértékük "" (null-, vagy üres sztring).
{ print }
amely kiírja az egész rekordot.
A megjegyzések ``#''-kal kezdődnek és a sor végéig folytatódnak. Üres sorok használhatók az utasítások elkülönítésére. Rendszerint egy utasítás az újsor karakterrel befejeződik, de ez nem igaz a ``,'', { , ? , : , && , vagy || végű sorokra. A do vagy else végű sorokban szereplő utasítások szintén automatikusan folytatódnak a következő sorban. Más esetekben a sort a végére írt ``'' karakterrel lehet folytatni. Ekkor az újsor karaktert a gawk figyelmen kívül hagyja.
Több, ``;''-vel elválasztott utasítás is írható egy sorba. Ez vonatkozik egyaránt a minta-tevékenység pár tevékenység részében szereplő utasításokra és magukra a minta-tevékenység utasításokra.
BEGIN END / reguláris kifejezés / relációs kifejezés minta " && " minta minta " || " minta minta " ? " minta " : " minta ( minta ) ! minta minta1 ", " minta2
A BEGIN és az END két speciális minta, amely nem inputfüggő. Minden BEGIN minta tevékenység része egy egységet képez úgy, mintha minden utasítás egyetlen BEGIN blokkba volna írva. Ezek előbb végrehajtásra kerülnek, mielőtt bármilyen bemenet beolvasása megtörténne. Ehhez hasonlóan az END blokkok is egybeolvadnak, és akkor hajtódnak végre, amikor minden bemenet beolvasása véget ért (vagy amikor exit utasítás hajtódik végre). A BEGIN és az END blokkok nem kombinálhatók más mintákkal a mintakifejezésekben. A BEGIN és az END mintákból nem hiányozhat a tevékenység rész.
A / reguláris kifejezés / mintákhoz rendelt utasítás minden olyan rekordra végrehajtódik, amely illeszkedik a reguláris kifejezésre. A reguláris kifejezések azonosak az egrep (3) programéival. Ezek összefoglalását lásd lejjebb.
A "relációs kifejezések" ben szerepelhet bármelyik, a lenti, tevékenységekről szóló részben definiált operátorok közül. Ezek rendszerint azt ellenőrzik, hogy bizonyos mezők illeszkednek-e bizonyos reguláris kifejezésekre.
Az && , || , és ! operátorok rendre a logikai ÉS, logikai VAGY és logikai NEM, mint a C-ben. Rövidzár kiértékelést végeznek, szintén, mint a C-ben. Egyszerűbb mintakifejezések összekapcsolására szolgálnak. Mint a legtöbb nyelvben, zárójelek használhatók a kiértékelés sorrendjének megváltoztatására.
A ?: operátor hasonlít a C ugyanezen operátorához. Ha az első minta igaz, akkor a második minta kerül felhasználásra az ellenőrzéshez, egyébként a harmadik. A második és harmadik minta közül csak az egyik értékelődik ki.
A minta1 ", " minta2 kifejezésforma neve tartományminta . Ez illeszkedik a minta1 -re illeszkedő rekorddal kezdve folytatólagosan minden bemenő rekordra, egy, a minta2 -re illeszkedő rekordig - beleértve a két határmintára illeszkedő rekordokat. Nem működik együtt másfajta mintakifejezésekkel.
Az intervallum-kifejezések csak akkor használhatók, ha a parancssorban --posix vagy --re-interval opciót jelölünk meg.
A sztring konstansokban érvényes escape szekvenciák (lásd lejjebb) szintén használhatók a reguláris kifejezésekben.
A karakterosztály a POSIX szabványban bevezetett új lehetőség. A karakterosztály egy speciális jelölés adott attribútumú karakterek leírásához, ahol viszont a tulajdonképpeni karakterek ország és ország és/vagy karakterkészlet és karakterkészlet között mások lehetnek. Például az alfabetikus karakter fogalma mást jelent az USA-ban és mást Franciaországban.
A karakterosztályok csak a karakterlista szögletes zárójelein belüli reguláris kifejezésben használhatók. Formájuk: [: , az osztályt jelölő kulcsszó és :] . Íme a POSIX szabványban definiált karakterosztályok.
Példának okáért, a POSIX szabvány előtt, az alfanumerikus karakterekre illeszkedést a /[A-Za-z0-9]/ leírásával lehetett volna elérni. Ha karakterkészletünkben egyéb alfabetikus karakterek is vannak, ez nem fog illeszkedni rájuk. A POSIX karakterosztályt használva a /[[:alnum:]]/ forma illeszkedni fog a karakterkészlet minden alfabetikus és numerikus karakterére.
Két további speciális szekvencia is megjelenhet a karakterlistákban. Ezek nem-ASCII karakterkészletekre vonatkoznak, amelyeknek lehetnek olyan szimbólumaik ( "egybeolvasott elemek" ), amelyek több, mint egy karakterrel vannak ábrázolva, és számos olyan karakter is, amelyek összehasonlító vagy rendező szempontból egyenértékűek. (Pl. a francia nyelvben a sima ``e'' és a tompaékezetes e` egyenértékűek.)
Ezek a szolgáltatások igan hasznosak a nem angolul beszélő területeken. A gawk által a reguláris kifejezések illesztéséhez használt könyvtári függvények jelenleg csak a POSIX karakterosztályokat ismerik fel; nem kezelik az egybeolvasott szimbólumokat vagy az ekvivalenciaosztályokat.
A \y , \B , \< , \> , \w , \W , \` , és \' operátorok gawk -specifikusak; a GNU reguláris kifejezés könyvtárainak szolgáltatásaira épülő bővítések.
A számos parancsssori opció azt szabályozza, hogy a
gawk hogyan kezelje a reguláris kifejezésekben szereplő karaktereket.
Az AWK operátorai csökkenő precedencia szerint:
A vezérlő utasítások a következők:
if (feltétel) utasítás [ else utasítás ] while (feltétel) utasítás do utasítás while (feltétel) for (kif1; kif2; kif3) utasítás for (var in array) utasítás break continue delete array[fIindexfB] delete array exit [ kifejezés ] { utasítások }
A bemeneti/kimeneti utasítások a következők:
Egyéb kimeneti/bemeneti átirányítások is megengedettek. A print -re és printf -re vonatkozóan a >> file a kimenetet a file végére írja, míg a | parancs csatornába ír. Ehhez hasonlóan a parancs " | getline" getline -ba irányít át. A getline parancs 0-val tér vissza a file végénél és -1-gyel hiba esetén.
A printf utasítás és sprintf() függvény (lásd lenn) AWK verziója a következő konverziós karaktereket fogadja el:
Léteznek további, opcionális paraméterek, amelyek a % és a vezérlőkarakter között állhatnak:
Az ANSI C printf() rutinjainak dinamikus szélesség és pontosság szolgáltatásai támogatottak. Egy * a width vagy prec előírások helyén azt eredményezi, hogy értéküket a printf vagy sprintf() argumentumlistájából veszik.
Amikor akár print -ből, akár printf -ből bemeneti/kimeneti átirányítást végzünk egy fájlba, a gawk felismer néhány speciális fájlnevet. Ezek elérhetővé teszik a szülő processzből (ez rendszerint a shell) örökölt nyitott fájldeszkriptorokat. Más különleges fájlnevek a futó gawk processzről szóló információhoz szolgáltatnak elérést. Ezek a fájlnevek:
Ezek különösen hibaüzenetek szempontjából fontosak. Például:
ahol egyébként a következő formát kellene használni:
Ezek a fájlnevek a parancssorban is felhasználhatók adatfile-ok megnevezésére.
Az AWK a következő elődefiniált aritmetikai függvényekkel rendelkezik:
A gawk a következő elődefiniált sztring függvényekkel rendelkezik:
Mivel az AWK programok egyik elsődleges felhasználási területe a log fájlok feldolgozása - amelyek időadatot tartalmaznak -, a gawk a következő két függvényt nyújtja az időadatok kinyeréséhez és formázásához:
Az AWK sztringjei dupla idézőjelek (") közé zárt karaktersorozatok. A gawk bizonyos escape szekvenciákat felismer a sztringekben. Ezek:
Az escape szekvenciák konstans reguláris kifejezésekben szintén használhatók (pl. /[ \t\f\n\r\v]/ whitespace karakterekre illeszkedik).
Kompatíbilis módban az oktális vagy hexadecimális escape szekvenciákkal jelölt karakterek literálisan kerülnek feldolgozásra a regurális kifejezés konstansokban. Így a /a\52b/ ugyanaz, mint a /a\*b/ .
A függvények végrehajtása akár mintából, akár tevékenységből való meghívásukkor történik meg. A függvényhívásokban megadott aktuális paraméterek a függvényekben deklarált formális paramétereknek adnak konkrét értéket. A tömbök átadása hivatkozás szerinti, a többi paraméteré érték szerinti.
Mivel a függvények eredetileg nem voltak az AWK nyelv részei, a lokális változók eléggé suta módon adhatók meg: a paraméterlistában extra paraméterekként deklarálandók. A konvenció az, hogy a paraméterlistában a lokális változókat extra space-ekkel választják el a valódi paraméterektől. Például:
function f(p, q, a, b) # a és b lokális { ..... }/abc/ { ... ; f(1, 2) ; ... }
A függvényhívás bal oldali zárójelének közvetlenül kell követnie a függvénynevet, whitespace nem lehet közöttük. Ez a konkatenációs operátorral való összekeverés elkerülése miatt van így. A megkötés nem vonatkozik a fent felsorolt beépített függvényekre.
A függvények hívhatják egymást és lehetnek rekurzívak. A lokális változóként használt függvényparaméterek üres sztring és zéró számértékkel inicializálódnak a függvényhívás során.
Ha a --lint opció meg van adva, a gawk fordítási és nem futási időben figyelmeztet a definiálatlan függvények hívása esetén. Futási időben egy definiálatlan függvény meghívása fatális hiba.
A func kulcsszó használható a function helyén.
Az összes felhasználó login nevének rendezése és kiírása:BEGIN { FS = ":" } { print $1 | "sort" }
Egy file sorainak megszámlálása:
{ nlines++ } END { print nlines }
A file minden sora elé a sorszám kiírása:
{ print FNR, $0 }
A sorszám konkatenációja (egy témavariáció):
{ print NR, $0 }
"The AWK Programming Language" , Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.
"AWK Language Programming" , Edition 1.0, published by the Free Software Foundation, 1995.
Új dolog a -v opció a programvégrehajtás megkezdése előtti változó-értékadáshoz. A könyv azt jelzi, hogy a parancssori értékadás akkor történik meg, amikor az awk egyébként fájlként nyitná meg az argumentumot - amely a BEGIN blokk végrehajtása után valósul meg. Azonban a korai megvalósításokban, amikor ilyen értékadás jelent meg fájlnevek előtt, az megtörtént, mielőtt a BEGIN blokk lefutott volna. Programok váltak ettől a ``szolgáltatástól'' függővé. Amikor az awk -ot a dokumentációjához igazították, ezt az opciót adták hozzá, hogy alkalmazkodjon a régi viselkedéstől függő alkalmazásokhoz. (E szolgáltatással szemben nem volt ellenvetés sem az AT&T, sem a GNU fejlesztői részéről.)
Az alkalmazás specifikus szolgáltatásokhoz tartozó -W opció a POSIX szabványból ered.
Az argumentumok feldolgozása során a gawk a ``--'' speciális opciót használja az argumentumok végének jelzéséhez. Kompatíbilis módban figyelmeztet a definiálatlan opciókra, másrészről viszont figyelmen kívül hagyja azokat. Rendes működéskor az ilyen argumentumok átadódnak az AWK programnak, hogy az dolgozza fel őket.
Az AWK könyv nem definiálja az srand() visszatérési értékét. A POSIX szabvány szerint az inicializáló értéket adja vissza, lehetővé téve a véletlenszám-sorozatok nyomonkövetését. Ezért a gawk srand() függvénye szintén az említett számmal tér vissza.
További új szolgáltatások: Több -f opció használata (az MKS awk ból); az ENVIRON tömb; a \a és \v escape szekvenciák (eredetileg a gawk -ban, majd onnan áttéve az AT&T awk -jába); a tolower() és toupper() beépített függvények (az AT&T-ből); és a printf ANSI C konverziós szabályai (először az AT&T verzióban).
A gawk következő szolgáltatásai nem érhetők el a POSIX awk -ban:
Az AWK könyv nem definiálja a close() függvény visszatérési értékét. A gawk close() függvénye az fclose (3) vagy pclose (3) függvénytől kapott értéket adja vissza, amikor egy fájlt illetve csatornát lezár.
A gawk --traditional opcióval történő hívásakor - ha a -F opciónak adott fs értéke ``t'' - az FS értéke a tab karakter lesz. Fontos, hogy a gawk -F\t ... megadása egyszerűen a shell ``t''-re hivatkozását eredményezi, és nem ad át ``\t''-t a -F opciónak. Mivel ez egy meglehetősen csúnya, speciális eset, nem ez az alapértelmezett viselkedés. Szintén nem ez történik, ha a --posix opció meg van adva. Hogy igazán a tab karaktert kapjuk mező-elválasztóként, a legjobb, ha aposztrófot használunk: gawk -F'\t' ... .
a = length # Holy Algol 60, Batman!
ugyanaz, mint bármelyik az
a = length()
a = length($0)
közül. Ezt a lehetőséget ``helytelenítik'' a POSIX szabványban, és a gawk figyelmeztető üzenetet jelenít meg, ha a --lint opció meg van adva a parancssorban.
A másik szolgáltatás a continue vagy break utasítás használata while , for vagy do ciklus törzsén kívül. A tradícionális AWK megvalósítások ezt a használatot a next utasítással egyenértékűként kezelték. A gawk --traditional megadása esetén támogatja ezt a használatot.
Az AWKPATH környezeti változó használható olyan könyvtárak megadására, amelyeket a gawk bejár a -f és --file opcióval megadott fájlok megkeresése érdekében.
Ha a rendszer támogatja a /dev/fd , és az összerendelt /dev/stdin/ , /dev/stdout és /dev/stderr file-okat, lehet, hogy más lesz a kimenet, mint ezen fájlok nélküli rendszereken. Amikor a gawk belül emulálja ezeket a fájlokat, összehangolja a standard kimenetre küldött kimenetet a /dev/out -ba küldött kimenettel; míg az ilyen fájlokkal rendelkező rendszereken a kimenet lényegében más fájlokba megy. Vigyázz, Vásárló!
Szintaktikailag érvénytelen egykarakteres programok valószínűleg túlcsordulnak az elemző vermen, és meglehetősen semmitmondó üzenetet generálnak. Az ilyen programokat meglepően nehéz teljesen általános esetben felismerni, és igazán nem éri meg ilyenirányú erőfeszítéseket tenni.
A gawk ot Paul Rubin és Jay Fenlason írta a Szabad Software Alapítványnál úgy, hogy kompatíbilis legyen a Seventh Edition UNIX-ban közzétett eredeti awk verzióval. John Woods számos hibajavítással járult hozzá. David Trueman - Arnold Robbins támogatásával - kompatíbilissá tette az awk -ot a UNIX awk új verziójával. Arnold Robbins a jelenlegi karbantartó.
Az eredeti DOS-os változatot Conrad Kwok és Scott Garfinkle készítette. A jelenlegi DOS-os karbantartó Scott Deifik. Pat Rankin munkája a VMS változat, és Michal Jaegermanné az Atari ST-s. Az OS/2-es változatot Kai Uwe Rommel készítette Darrel Hankerson támogatásával és segítségével. Fred Fish szolgáltatta az Amiga támogatást.
Mielőtt hibajalentést küldenél, kérünk, tégy meg két dolgot. Először: ellenőrizd, hogy a gawk legújabb verziója van-e meg. Sok hiba (rendszerint hajszálnyiak) kerül kijavításra minden verzióban, és ha a tiéd elavult, lehet, hogy a problémát már megoldották. Másodszor: olvasd el figyelmesen a man lapot és a referenciakönyvet, hogy megbizonyosodj róla, hogy amit hibának gondolsz az valóban hiba, és nem csak egy hirtelen fordulat a nyelvben.
Bármit is teszel, NE küldj hibajalantést a comp.lang.awk címre. Jóllehet a gawk fejlesztői alkalmanként olvassák ezt a hírcsoportot, a hibajelentések oda postázása megbízhatatlan módja a hibajelentésnek. Ehelyett, kérünk, használd a fent megadott e-mail címeket.
Mindenki számára engedélyezzük, hogy teljes másolatot készítsenek és terjesszenek erről az iratról, azzal a kikötéssel, hogy a copyright megjegyzés és ez az engedély fel legyen tüntetve minden másolaton.
Engedélyezzük, hogy ezen irat megváltoztatott verzióit másolják és terjesszék - a teljes másolatra vonatkozó kikötéssel - , feltéve, hogy a teljes leszármazott munka ezzel a copyright megjegyzéssel megegyező engedélyekkel bírjon.
Engedélyezzük ennek az iratnak más nyelvre történt fordításának másolását és terjesztését a fenti feltételek szerint, azzal a különbséggel, hogy ezt az engedélyező megjegyzést - a Free Software Foundation által elfogadott - fordításban is lehet közölni.