Az AWK szrkiptek felépítése
Előismeret
- Minden AWK forrásprogram szabályok sorozata. Minden szabály tartalmazhat egy mintát és egy hozzá tartozó tevékenységet avagy akciót. Az akciót különféle utasításokból állíthatjuk össze.
- A szabályok alakja: MINTA{AKCIÓ}, ahol a MINTA valamilyen logikai feltétel, az AKCIÓ pedig legtöbbször utasítások sorozata
- A szabályokat egymástól sortöréssel vagy pontosvesszővel lehet elválasztani.
- A feldolgozás során a bemenet tartalmát rekordokra (record) bontja, ezek alapesetben a bemenet sorai lesznek. A rekordokat szintén továbbontja mezőkre (field), amiket alapesetben az illető sor szavai képviselnek.
Egy rekordra $0-val lehet hivatkozni. Az összes szó pedig 1-1 mező. Ezekre a mezőkre a $1,$2,...,$n formájában hivatkozhatunk. Figyelem, ezeknek a szimbólumoknak semmi közük a program parancssori paramétereihez!
A bemenet feldolgozása tehát rekordonként történik. Minden rekordot megpróbál illeszteni sorban az összes szabály mintájára, az első szabálytól kezdve. Ha a rekord illeszkedett egy szabály mintájára, akkor végrehajtódik a hozzá tartozó akció. Végül az összes szabály ellenőrzése után rátér a következő rekord feldolgozására.
Általános felépítés
#/!/usr/bin/gawk -f
BEGIN {
utasítások
}
{
főprogram
}
END {
utasítások
}
-
BEGIN csak a bemenet feldolgozása előtt teljesül. A BEGIN mintához tartozó akció pontosan egyszer hajtódik végre, mégpedig a legelső bemeneti rekord feldolgozása előtt. Ez akkor is így történik, ha több bemeneti állományt adtunk meg.
-
A „főprogramban” található utasításokat az awk a bemenet valamennyi során önműködően végrehajtja, vagyis a program eleve tartalmaz egy rejtett (implicit) ciklust. (Emlékezzünk rá, hogy BASH esetén a táblázat sorainak végigpásztázásához nekünk magunknak kellett ciklust írnunk.)
-
END csak a bemenet feldolgozása után teljesül. A BEGIN mintához hasonlóan, az END mintához tartozó akció is pontosan egyszer, az utolsó bemeneti rekord feldolgozása után hajtódik végre. Ezt az awk program befejeződése követi.
Hello AWK
#!/usr/bin/awk -f
BEGIN {
print "Hello AWK!" # a print paranccsal írunk ki a képernyőre
}
Licensed under the Creative Commons Attribution Non-commercial Share Alike License 4.0