C2110 Operační systém UNIX a základy programování 12. lekce awk - pokračování Petr Kulhánek kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta Masarykova univerzita, Kamenice 5, CZ-62500 Brno Operační systém UNIX a základy programování 13. lekce Obsah > AWK • Analýza textových souborů • Regulární výrazy • Pole Dperační systém UNIX a základy programování 13. lekce -2- Průběh vykonávání skriptu BEGIN { } { } /VZOR/ { } END { } Blok BEGIN (1) se vykoná (pokud je ve skriptu obsažen) před analýzou souboru. • Načte se záznam ze souboru. Ve výchozím nastavení je záznamem celý řádek analyzovaného souboru nebo proudu. Záznam se rozdělí na pole. Ve výchozím nastavení jsou pole jednotlivá slova v záznamu. • Pro daný záznam se vykoná blok (2). • Pokud záznamu vyhovuje VZOR, vykoná se blok (3). • .... vykonají se případně další bloky .... Blok END (4) se vykoná (pokud je ve skriptu obsažen) po analýze celého souboru. Blok je uzavřen do složených závorek {}. Výše uvedené programové bloky jsou volitelné. Ve výchozím nastavení je záznamem řádek souboru. Dperační systém UNIX a základy programování 13. lekce Regulární výrazy /VZOR/ { Pokud záznamu vyhovuje VZOR, tak se blok vykoná. } Vzor je regulární výraz. Regulární výraz je jazyk, který popisuje strukturu textového řetězce. Jazyk se využívá k vyhledávání textových řetězců, k nahrazování části řetězců. Příklady jednoduchých regulárních výrazů: TEXT - je splněno, pokud je v daném záznamu obsažen TEXT (může být kdekoliv) ATEXT - je splněno, pokud je v daném záznamu obsažen TEXT na začátku TEXT$ - je splněno, pokud je v daném záznamu obsažen TEXT na konci Operační systém UNIX a základy programování 13. lekce Cvičení 1. Ze souboru rst.out vyextrahujte průběh teploty na čase. Průběh zobrazte v gnuplotu. 1.000 TEMP(K) NSTEP = 1000 TIME(PS) = Etot = 907.8481 EKtot = 160.3711 BOND = 40.6154 ANGLE = 273.9238 1-4 NB = 14.6900 1-4 EEL = 973.2602 EELEC = -488.9232 EGB = -163.0629 EAMBER (non-restraint) = 747.0977 305.69 EPtot DIHED VDWAALS RESTRAINT PRESS 0.0 747 . 4770 164 . 5827 -67.6091 0.3793 2. Ze souboru rst.out vyextrahujte průběh celkové energie (Etot), kinetické energie (EKtot) a potenciální energie (EPtot) na čase. Průběh jednotlivých energií zobrazte v gnuplotu. Ověřte, že součet potenciální a kinetické energie se rovná celkové energii. Dperační systém UNIX a základy programování 13. lekce -5- Pole AWK používá asociativní pole. Pole má název, k prvkům pole se přistupuje pomocí klíče. Klíč může mít libovolnou hodnotu a typ. Klíčem může být hodnota proměnné. Přiřazeni hodnoty: moje pole[klic] = hodnota; Ziskáni hodnoty: hodnota = moje pole[klic]; i = 5; moje_pole[i] = 15; print moje pole[i]; a = "slovo"; moje pole[a] = "hodnota"; print moje pole["slovo"], moje pole [5]; Přiklady: Dperační systém UNIX a základy programování 13. lekce Pole,... Procházení seznamu klíčů: for( proměnna in pole) { print pole[proměnna]; } Vykoná tělo cyklu pro každý klíč, který byl použit pro uložení hodnoty do pole. Hodnota klíče je uložena do proměnné . Mazání záznamu s klíčem: delete polefklic]; Dperační systém UNIX a základy programování 13. lekce Cvičení 1. Ze souboru rst.out vyextrahujte průběh teploty v čase. Výsledný soubor nebude obsahovat dvě poslední hodnoty, které jsou průměrnou hodnotou a její fluktuací. Průběh zobrazte v gnuplotu. 2. Ze souboru rst.out vyextrahujte průběh teploty a spočítejte její průměrnou hodnotu. Vypočtenou hodnotu srovnejte s průměrnou hodnotou uvedenou v souboru rst.out. Proč se hodnoty liší? Dperační systém UNIX a základy programování 13. lekce -8-