Skip navigation

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
}