UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED AWK - szintaxis, vezérlési szerkezetek Operációs rendszerek 11. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 1 / 13
AWK - workflow - ismétlés BEGIN { } Sor olvasása az input folyamból MINTA { } Nem Fájl vége? Igen END { } Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 2 / 13
AWK - szintaxis A szabályok alakja: [minta]{[akció]} Hiányzó minta esetén az illető akció minden sor esetén lefut A hiányzó akció ekvivalens a {print} akcióval, ami kiírja az egész sor tartalmát A {} páros az üres akciót jelöli, tehát nem egyezik meg az akció elhagyásával! Az akciók utasításlistája több sorból is állhat #: A sor végéig tartó megjegyzés $[szám]: az aktuális sor megadott sorszámú mezőjének tartalma $NF: az aktuális rekord utolsó mezőjének tartalma (ld. később) $[szám]=[érték]: egy adott mező, ill [szám]=0 esetén a sor értékének módosítása Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 3 / 13
AWK felépítés, összetett minták Összetett minták: [minta1]&&[minta2]: logikai ÉS [minta1] [minta2]: logikai MEGENGEDŐ VAGY [minta1],[minta2]: Rekordok tartományára illeszkedik, kezdve egy olyan rekorddal, amely [minta1]-re illeszkedik, egészen egy olyan rekordig, amely [minta2]-re illeszkedik A BEGIN és END mintákhoz mindig meg kell adni az akciót is, ezek a speciális minták nem kombinálhatók semmilyen más mintával, valamint nem alkalmazható rájuk a csoportosítás és a negáció sem Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 4 / 13
AWK felépítés, akciók A szabályok akcióját alkotó utasítások építőelemei: Változók Tömbök (ld. jövő órán) delete utasítás (ld. jövő órán) Aritmetikai kifejezések Vezérlési szerkezetek Egyéb utasítások Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 5 / 13
AWK - változók A változók neve betűket, számokat és aláhúzásjelet tartalmazhat, és nem kezdődhet számjeggyel Változók típusai: numerikus változók, szöveges változók, egydimenziós tömbök A tömböket kivéve minden változó típusa dinamikus, azaz a használattól függően változik [név]=[érték]: értékadás [név]: a megadott nevű változó aktuális értékének behelyettesítése A változók értékét az awk automatikusan konvertálja számmá vagy szöveggé, a használati módtól függően Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 6 / 13
AWK - beépített változók FILENAME: az aktuális bemeneti állomány neve A BEGIN minta akcióján belül definiálatlan NR: az aktuális rekord sorszáma az eddig feldolgozott bemenet tekintetében. FS: bemeneti mezőhatároló karakter, kezdetben a szóköz RS: bemeneti rekordhatároló karakter, kezdetben a sortörés OFS: Kimeneti mezőhatároló, kezdetben a szóköz ORS: Kimeneti rekordhatároló, kezdetben a sortörés IGNORECASE: ha értéke nem 0, akkor a kis- és nagybetűk ekvivalensek NF: az aktuális rekord mezőinek száma Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 7 / 13
AWK - aritmetikai kifejezések Egész és lebegőpontos értékekkel is lehet számoni A legtöbb szokásos aritmetikai művelet használható: +, -, *, /, %, (, ), ^ Értékadás, rövidített írásmód: =, +=, -=, *=, /=, %=, ^= Pre- és postfix inkrementálásra is van lehetőség: ++, -- Aritmetikai összehasonlítások: ==,!=, <, <=, >, >= Logikai operátorok: &&, Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 8 / 13
AWK - vezérlési szerkezetek if ([feltétel]) [parancslista]... else [parancslista] while ([feltétel]) [parancslista] do [parancslista] while ([feltétel]) for ([kif1]; [kif2]; [kif3]) [parancslista] for ([index] in [név]) [parancslista] Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 9 / 13
AWK - egyéb utasítások break, continue: kilépés a ciklusból, ill. rátérés a ciklus következő iterációjára exit: a bemenet feldolgozásának azonnali befejezése, ill. ha nem az END minta akciójában vagyunk, akkor oda ugrás print [lista]: kiírja a vesszővel tagolt [lista] tagjainak értékét print: az aktuális rekord teljes tartalmát írja ki printf [formátum sztring], [lista] : formázott kiíratás a C- ben megismert printf() függvényhez hasonlóan next: azonnal nekikezd a következő bemeneti rekord feldolgozásához, a legelső szabály mintáját tesztelve Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 10 / 13
AWK - egyéb utasítások #! /usr/bin/awk -f # Kiírja az osztalyzatok.csv fájlból a tanulok nevét és EHA kódját # Használat:./os11_1.awk osztalyzatok.csv BEGIN { FS = "; print "ELEJE print " } NR > 1 { printf("%s\t%s\n", $1, $2) } # vagy: NR > 1 { OFS = "\t" print $1, $2 print " } END { print "VÉGE" } os11_1.awk Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 11 / 13
AWK - feladatok I Írj olyan AWK scriptet, ami az ls kimenetéből kiírja a fájl nevét, majd a fájl tulajdonosának nevét! (os11_2.awk) Írj olyan AWK scriptet, amely az ls kimenetéből kiszűri azokat az állományokat, melyekre a tulajdonosnak van futtatási jogosultsága, és 2015 után hozták létre! (os11_3.awk) Írj olyan AWK scriptet, ami meghatározza az aktuális mappában lévő legtöbb tárhelyet foglaló állományt! (os11_4.awk) Írj olyan AWK scriptet, ami minden páros sort ír ki az ls kimenetéből! (os11_5.awk) Írj olyan AWK scriptet, ami kiszámolja az osztalyzatok.csv fájlból az operációs rendszerek tárgy átlagát! (os11_6.awk) Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 12 / 13
AWK - feladatok II Írj olyan AWK scriptet, ami a osztalyzatok.csv fájlban található adatokból hallgatónként kiszámolja az átlagokat, valamint összesített átalagot is készít! (os11_7.awk) Írj olyan awk scriptet, ami minden páros oszlopot ír csak ki a képernyőre az ls kimenetéből! (os11_8.awk) Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 13 / 13