AWK ismétlés AWK: adatvezérelt nyelv: bizonyos adat esetén végrehajt valamit. Egy AWK program felépítése: Minta { tevékenység } párok alkotta szabályok sorozata illetve függvénydefiníciók. Input adatok: a parancssorban megadott fájl(ok)ból vagy a standard bemenetről. Az input az RS (record separator) értékének megfelelően rekordokra (alapértelmezés „\n” soremelés) tagolódik. A rekordok az FS (field separator) értéke szerint mezőkre oszlanak, ezekre a $1, $2... nevekkel hivatkozunk. A mezők száma: NF A rekordok száma: NR
AWK ismétlés Összegezzük egy könyvtár állományainak méretét! ls -l | awk ' { sum+=$5 } END { print sum } ' Az Awk az ls parancs kimenetét dolgozza fel: A program két részből áll: A '{ sum+=$5}' rész jelentése: A minta üres, tehát minden sorra alkalmazzuk a sum+=$5 műveletet: összegezzük a bemenet 5. mezőit. Ez a fájlok mérete. Az END utáni második rész: A bemenet feldolgozása után írjuk ki a sum értékét.
AWK ismétlés ls -F|awk ' /\*$/ { sum+=1 } END { print sum } ' Végrehajtható állományok számlálása egy könyvtárban: ls -F|awk ' /\*$/ { sum+=1 } END { print sum } ' Az Awk program első része: ' /\*$/ { sum+=1 }' Keressük a bemenet sorai közt azokat, amelyeknek a végén * van. ($ a sorvéget jelzi.) Ezekre alkalmazzuk a számláló eggyel való növelését. A bemenet feldolgozása után írjuk ki az eredményt.
AWK ismétlés ls -a|awk ' /^\./ { sum+=1 } END { print sum } ' Rejtett állományok számlálása egy könyvtárban: ls -a|awk ' /^\./ { sum+=1 } END { print sum } ' Az Awk program első része: ' /^\./ { sum+=1 }' Keressük a bemenet sorai közt azokat, amelyeknek az elején . van. (^ a sor elejét jelzi.) Ezekre alkalmazzuk a számláló eggyel való növelését. A bemenet feldolgozása után írjuk ki az eredményt.
AWK minták 1. A legegyszerűbb: egy karaktersorozat, a sorban bárhol: /Fen/ Az Awk kisbetűérzékeny; ez a minta nem illeszkedik a „fenntartó” szóra de illeszkedik a „Fenyő”, „Cinke a Fenyőfán” és hasonló sztringekre.
4. Speciális karaktereket tartalmazó sztring: AWK minták 2. Sor eleji sztring: /^sorkezdő/ 3. Sorvégi sztring: /sorvégi$/ 4. Speciális karaktereket tartalmazó sztring: /\*/; /\$/; /\./ Itt fontos a \ jel szerepe: megakadályozza a speciális karakter jelentésének érvényesítését.
AWK minták 5. Alternatív karakterek: /[Kk]ovács/ Illeszkedik a kovács és a Kovács karaktersorokat tartalmazó sztringekre. 6. Karakter-intervallumok: /[a-z]/ 1 db bármely kisbetűből (angol abc) /[a-zA-Z]/ 1 db bármely betűből (angol abc) /[a-zA-Z0-9]/ 1 db bármely betűből (angol abc) vagy számból
AWK minták 7. Kifejezések logikai „VAGY” kapcsolata: /(^Magyar)|(^Németh)/ Az egyes kifejezések () jelek közt vannak: soreleji vezetékneveket keresünk a bemenetben.
AWK minták Szabályos vagy reguláris kifejezések 8. Helyettesítő karakterek . (pont): 1 db bármilyen karakter * (csillag): az őt megelőző karakter vagy kifejezés 0 vagy akárhány ismétlése. Pl.: /Q*/ : lehet '', Q, QQ, QQQ, QQQQ... ? (kérdőjel): az őt megelőző karakter vagy kifejezés 0 vagy 1 esete. Pl.: /[+-][0-9]/ egy 1 jegyű szám, előjellel vagy nélküle. + (plusz) : az őt megelőző karakter vagy kifejezés 0 vagy több előfordulása. Pl: /^[+-]?[0-9]+$/: egy előjeles vagy előjel nélküli egész szám, amely magában áll a sorban. Az így felépített kifejezések: Szabályos vagy reguláris kifejezések
Készítsünk statisztikát egy névsorból a családnevek előfordulására! awk ' { if ($1=="dr." || $1=="vitéz") nev=$2 else nev=$1 tomb[nev]++ szam++ } END { for (nev in tomb) { printf "%3d :%s: %5.2f ", tomb[nev],nev,tomb[nev]/szam*100 csnev++; print "%" printf "\nÖsszesen:%d személy, %d családnév ", szam,csnev }' < nevsor1.txt|sort -n|less