Awk
A Wikipédiából, a szabad enciklopédiából.
- A szócikk címe technikai okok miatt pontatlan. A helyes cím: awk.
Az awk egy általános célú programozási nyelv, amelyet szöveges állományok földolgozására terveztek. Elnevezése a megalkotói – Alfred Aho, Peter Weinberger és Brian Kernighan – családnevének kezdőiből született. A UNIX 3 verziójában jelent meg. Ideális szöveges állományok szűrésére, átformálására, kiértékelésére. Ma is minden unix rendszeren van legalább egy awk változat. A Free Software Foundation a gawk nevű változatot gondozza. A linux disztribúciókkal jellemzően a gawk implementációt szállítják. Windows rendszerekhez is letölthető a gawk például a Cygwin részeként.
Az awk kizárólag karaktersorozatokkal, másszóval stringekkel foglalkozik, a számábrázolásra is ezeket használja. Emellett ismeri az asszociatív tömböket is (példa: a["kutya"], a["macska"]), melyeket hash-nak is neveznek. Ezek például szótárszerű alkalmazásoknál nyújtanak kitűnő segítséget. A szabályos kifejezések (idegen szóval regular expressions) szintén a nyelv részei.
Az awk nyelv ereje, rövidsége, de az awk szkriptek határainak felismerése adta Larry Wallnak az ötletet a Perl nyelv kifejlesztésére.
Tartalomjegyzék |
[szerkesztés] Egy awk program felépítése
Egy tipikus awk program a végrehajtása során a bemeneti adatokat egy másféle kimenetté formálja át.
A programok általában mintából és a mintához tartozó parancsokból állnak:
- /1. minta / { parancs(ok) }
- /2. minta / { parancs(ok) }
Az awk soronként olvassa a bemenetet. Minden beolvasott sort összehasonlít a mintákkal, és ha illeszkedést talál, a parancsokat végrehajtja. A mintákat a szabályos kifejezések szabályai szerint értelmezi.
A különleges parancsformák:
- BEGIN { parancs(ok) }
- adatbeolvasás előtt ezeket a parancsokat végrehajtja
- END { parancs(ok) }
- adatbeolvasás és a többi parancs végrehajtása után ezeket a parancsokat végrehajtja
- /minta/
- ha nincs külön parancs megadva, a mintának megfelelő sort kinyomtatja
- { akció }
- ha nincs minta megadva, a parancsokat végrehajtja minden sorra egymás után
[szerkesztés] Változók
Lehetséges a változók használata. A programozó maga is definiálhat változókat, de vannak előre megadott változók, nevezetesen:
- $0
- a feldolgozás alatt álló egész sor
- $1, $2, ...$n
- a sor egyes, egymástól szóközzel elválasztott részei.
Ez az automatikus felbontás nagyon egyszerűvé és hatékonnyá teszi az sorok feldolgozását.
[szerkesztés] Awk parancsok
Az awk nyelv szintaxisa hasonlít a C nyelvéhez, ami nem csoda, hiszen az awk nyelv egyik szerzője, Brian W. Kernighan a C nyelv megalkotója. Elemi parancsok a változóknak való értékadás, a változók összehasonlítása, az elágazás (if...else) és a ciklus (for, while). Emellett belső függvényeket, illetve saját implementálású függvényeket is meg lehet hívni. Egy egyszerű függvénydefiníció lehet például a következő:
function add_three (number, temp) { temp = number + 3 return temp }
Egy így definiált függvény az alábbi szintaxissal hívható meg. Ennek a parancsnak a hatására 39 íródik a kimenetre:
print add_three(36)
Az adatokat a "print" paranccsal lehet kinyomtatni, azaz a kimenetre írni. Például egy sor második mezőjét a
print $2
paranccsal nyomtatjuk/írhatjuk ki a szabványos kimenetre.
[szerkesztés] Példák
[szerkesztés] Helló, világ!
A „Helló, világ!” program awk-ban a következőképpen implementálható:
BEGIN { print "Helló, világ!" }
[szerkesztés] Adott karakterszámnál hosszabb sorok kiíratása
A következő programmal a 80 karakternél hosszabb sorokat írja ki. Vegyük észre, hogy az alapértelmezett akció a sor kiírása:
length > 80
[szerkesztés] Sorok, szavak és karakterek megszámlálása
Az alábbi awk program megszámolja majd kiírja a bemeneti fájlban lévő sorok, szavak és karakterek számát úgy, mint a wc nevű program:
{ w += NF c += length + 1 } END { print NR, w, c }
[szerkesztés] Szavak előfordulási gyakoriságának kiszámítása
Szavak gyakoriságáról készít statisztikát asszociatív tömb felhasználásával a következő példa:
BEGIN { FS="[^a-zA-Z]+"} { for (i=1; i<=NF; i++) words[tolower($i)]++ } END { for (i in words) print i, words[i] }
[szerkesztés] Irodalom
- Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger: Az AWK Programozási nyelv. Addison-Wesley, 1988, ISBN 0 201 07981 X
[szerkesztés] Külső kapcsolatok
- comp.lang.awk – Usenet hírcsoport
- http://www.gnu.org/software/gawk/gawk.html – GAWK (GNU Awk) Weboldal
- http://www.bg.bib.de/portale/bes/Scripting/AWK/awk.pdf – AWK-bevezető németül