C2110 Operační systém UNIX základy programování 12. lekce / modul 1 PS/2020 Distanční forma výuky: Revl 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 Dperační systém UNIX a základy programování 12. lekce / modul 1 AWK http://www.gnu.org/software/gawk/gawk.html AWK je skriptovací jazyk navržený pro zpracovávání textových dat, ať už v podobě textových souborů nebo proudů. Jazyk využívá řetězcové datové typy, asociativní pole (pole indexovaná řetězcovými klíči) a regulární výrazy. adaptováno z www.wikipedia.org Dperační systém UNIX a základy programování 12. lekce / modul 1 Obsah > AWK • Podmínky, logické operace • Řízení běhu (next, exit) • Cykly • Pole Dperační systém UNIX a základy programování 12. lekce / modul 1 -3- Podmínky if( logicky_vyraz ) { prikaz2; • • • } else { prikaz3; } Pokud je logicky_vyraz pravda, vykoná se prikaz2. V opačném případě se vykoná prikaz3. Příklad: if ( $1 > max ) { max = $1; } Rozdíly vůči jazyku BASH \—L if prikazl; then prikaz2 else prikaz3 fi Dperační systém UNIX a základy programování 12. lekce / modul 1 Logické operátory Operátory: < <= > >= i m && rovna se nerovná se menší než menší než nebo rovno vetsi nez větší než nebo rovno negace logické ano logické nebo Příklady: j > 5 (j > 5) (j <= 5) && (j < 10) II (j >= 10) Dperační systém UNIX a základy programování 12. lekce / modul 1 Cvičení 1 1. Napište skript, který vytiskne největší a nejmenší hodnotu ze třetího sloupce souboru matice.txt. 2. Napište skript, který vytiskne ze souboru rst.out řádky, které obsahují devět slov. 3. Napište skript, který vypočítá průměrnou hodnotu čísel uvedených v druhém sloupci souboru matice.txt. Data jsou v adresáři: /home/kulhanek/Documents/C2110/Lessonl2 Dperační systém UNIX a základy programování 12. lekce / modul 1 Klíčové slovo next ukončí zpracovávání aktuálního záznamu. Dále se pokračuje následujícím záznamem. Dperační systém UNIX a základy programování 12. lekce / modul 1 Klíčové slovo exit ukončí zpracovávání aktuálního záznamu a všech následujících souborů. 12. lekce / modul 1 -8- Cvičení 2 1. 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ší? Data jsou v adresáři: /home/kulhanek/Documents/C2110/Lessonl2 Operační systém UNIX a základy programování 12. lekce / modul 1 Cykly for(inicializace; podminka; zmena) { prikazl; } Příklad: for(I=l;I <= 10;I++){ sum = sum + $I; } Rozdíly vůči jazyku BASH U4 for ( (inicializace/podminka;zmena)) ; do prikazl done «_ Dperační systém UNIX a základy programování 12. lekce / modul 1 Cvičení 3 1. Napište skript, který sečte hodnoty všech čísel uvedených v souboru matice.txt. 2. Napište skript, který vytiskne počet slov, které obsahuje soubor rst.out. Výsledek ověřte pomocí příkazu wc. Data jsou v adresáři: /home/kulhanek/Documents/C2110/Lessonl2 12. lekce / modul 1 Dperační systém UNIX a základy programování -11- 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]; Jako klíče se nedoporučuje používat reálná čísla! Proměnná: A H proměnná obsahuje pouze jednu hodnotu A=5; print A; Asociativní pole: P g pole může obsahovat více hodnot, pro každý klíč však pouze jednu. P[9]=5; P["a"]=10; print P[9], P["a"]; Dperační systém UNIX a základy programování 12. lekce / modul 1 Pole - příklady Příklady: i = 5; moje_pole[i] = 15; print moje_pole[i]; a = "slovo"; moje_pole[a] = "hodnota"; print moje pole["slovo"], moje pole[5]; Praktické použiti: BEGIN { počet = 0; data[pocet++] = $1; script vypíše počet hodnot ve slouci 1 a poté jejich hodnoty END print počet; for(i=0; i < počet; i++){ print data[i]; Dperační systém UNIX a základy programování 12. lekce / modul 1 Cvičení 4 1. Soubor structurel.dat obsahuje na každém řádku jméno prvku a polohu atomu. Napište skript, který soubor převede do formátu xyz a uloží pod názvem structurel.xyz. Zkonvertovanou strukturu zobrazte v programu VMD. 2. Hromadnost řešení ověřte konverzí souboru structure2.dat. Data jsou v adresáři: /home/kulhanek/Documents/C2110/Lessonl2 Dperační systém UNIX a základy programování 12. lekce / modul 1 -14- Samostudium Dperační systém UNIX a základy programování 12. lekce / modul 1 Pole, Procházení seznamu klíčů: for( proměnna in pole) { print pole[proměnna]; } Mazání záznamu s klíčem: 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é. POZOR: pořadí klíčů není určeno a nemusí tedy odpovídat pořadí zakládání prvků do pole delete polefklic]; Dperační systém UNIX a základy programování 12. lekce / modul 1