Zpracování textu Programovatelný filtr awk Jedná se o programovací jazyk (?), který pracuje se záznamy a poli, je pomalejší než vyšší programovací jazyky,

Slides:



Advertisements
Podobné prezentace
Množiny Přirozená čísla Celá čísla Racionální čísla Komplexní čísla
Advertisements

Pro začátek něco lehčího
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Seznamy Seznam = očíslovaná posloupnost skalárů Zápis seznamu do kulatých závorek: ("máslo")# jednočlenný seznam (1,2,3)# seznam se 3 členy ("jedna",2,3,"osm",100,$pozdrav)
Programování funkcí v Excelu
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
Programování v Pascalu
ALGO – Algoritmizace 6. cvičení
VISUAL BASIC Práce se soubory.
ALGO – Algoritmizace 1. cvičení
MATLAB.
Programování v Pascalu Přednáška 3
Algoritmizace a programování Operátory a příkazy v Delphi - 07
Informatika pro ekonomy II přednáška 11
Shell jako programovací jazyk Příkazy větvení Dva operátory pro tvorbu podmíněných příkazů if, case Obecný formát: if podmínka then příkaz1 [else příkaz2]
If-else, do-while, switch, operátory
Algoritmy I Cvičení č. 4.
Algoritmy I Cvičení č. 3.
Skriptový jazyk, který se používá při tvorbě stránek.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
MATLAB® ( část 3 - scripty).
Lineární algebra.
Operátory (1. část) 3 A1PRG - Programování – Seminář
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Informatika I 3. přednáška
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
PHP PHP – základy syntaxe (část 2) - 04 Mgr. Josef Nožička IKT PHP
Zpracování textu Regulární výraz Pro manipulaci s textem je v operačním systému UNIX k dispozici mimo editory řada filtrů, s jejichž pomocí lze upravovat.
Proměnné v PHP Každý programovací jazyk pracuje s nějakými hodnotami. To, do čeho se tyto hodnoty ukládají, se nazývá proměnné. Každý programovací jazyk.
JavaScript Podmínky, cykly a pole.
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Programovací jazyk PASCAL
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_06 Digitální učební materiál Sada: Úvod do programování.
UNIX — doplňky Informatika pro ekonomy II přednáška 9.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
Začínáme vážně programovat Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů.
ALGO – Algoritmizace 4. cvičení 1.ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES CYKLY V PHP.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Datové typy a operátory. Co jsou datové typy  Charakterizují proměnnou nebo konstantu – jaká data obsahuje  Data jsou v počítači ukládána jako skupiny.
Úvod do UNIXu (6th round)
PHP Stručný úvod.
Algoritmizace a programování Aritmetické, Relační a Logické operátory, Knihovny.
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Programovací jazyk C# 4. část - cykly.
Výukový materiál zpracován v rámci projektu
Algoritmizace a programování
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
TENTO PROJEKT JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM
Výukový materiál zpracován v rámci projektu
Databázové systémy a SQL
Proměnné (1) Proměnná: Definice proměnných:
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
CU01 Informatika II 2/13 Základy algoritmizace
Transkript prezentace:

Zpracování textu Programovatelný filtr awk Jedná se o programovací jazyk (?), který pracuje se záznamy a poli, je pomalejší než vyšší programovací jazyky, dá se přepsat do jazyka C. awk -f scénář.awk vstupní_soubory Struktura programu Program pro awk se skládá z dvojic vzor {činnost}. Vzor určuje záznam (obvykle řádek), na kterém se činnost provede. Jestliže není vzor uveden, provádí se činnost na všech záznamech. Implicitní činností je výpis záznamu na standardní výstup. Implicitním oddělovačem polí jsou mezery a tabelátory, impicitním oddělovačem záznamů je nový řádek. Jednotlivá pole jsou přístupná prostřednictvím $1, $2, … Proměnná $0 obsahuje celý záznam.

Zpracování textu $ cat scenar1 {print $2,$1" "$4} $ cat seznam1 Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $ cat scenar1 {print $2,$1" "$4} $ awk -f scenar1 seznam1 Oto Pilny Zdenek Zaruba Ivo Pritulny Jan Bezzemek Zdenek Kytlink Rene Horn $ Argumenty příkazu print mohou být odděleny čárkou (mezera) nebo tabelátorem (přehlednější výstup).

Zpracování textu $ cat scenar2 /referent/ {print $2,$1" "$6",- Kc"} $ awk -f scenar2 seznam1 Ivo Pritulny 12569,- Kc Jan Bezzemek 12548,- Kc Zdenek Kytlink 10258,- Kc $ cat scenar3 /referent/ || /manager/ {print $2,$1" "$6",- Kc"} $ awk -f scenar3 seznam1 Zdenek Zaruba 15368,- Kc Ivo Pritulny 12569,- Kc Jan Bezzemek 12548,- Kc Zdenek Kytlink 10258,- Kc $ Vzor je uzavřen mezi znaky / (viz. ed), lze použít libovolný regulární výraz, mohou se používat logické operátory ! (negace), || (logický součet), && (logický součin), () (úprava priority vyhodnocování). Porovnání se vzorem lze omezit pouze na některá pole pomocí operátoru ~ (!~).

Zpracování textu $ cat scenar4 $5~/1956/ {print $0",- Kc"} $ awk -f scenar4 seznam1 Pritulny Ivo referent ,- Kc Bezzemek Jan referent ,- Kc $ cat scenar4 $5!~/1956/ {print $0",- Kc"} $ awk -f scenar4 seznam1 Pilny Oto vedouci ,- Kc Zaruba Zdenek manager ,- Kc Kytlink Zdenek referent ,- Kc Horn Rene skladnik ,- Kc $ \b backspace\f nová stránka \n nový řádek\r návrat vozíku \t tabelátor\ooo znak s oktalovou \" uvozovkyhodnotou $ cat scenar4 {print $1"\t\101\40\102"} $ awk -f scenar4 seznam1 Pilny A B Zaruba A B Pritulny A B Bezzemek A B Kytlink A B Horn A B $

Zpracování textu Proměnné Proměnné awk mohou být skaláry i vektory. Na jednotlivé prvky vektoru se uživatel odvolává pomocí indexu v hranatých závorkách [], indexem může být libovolný řetězec (a[1], pole[3], pole[karel]). awk operuje se dvěma druhy proměnných - vestavěné (vnitřní) a uživatelské (vnější). $0, $1, $2, … FSvstupní oddělovač polí (mezera, TAB) NFpočet polí zpracovávaného záznamu NRpořadové číslo zpracovávaného záznamu OFSvýstupní oddělovač polí (mezera) ORSvýstupní oddělovač záznamů (LF) RSvstupní oddělovač záznamů (LF) Uživatelské proměnné se definují v části příkazu činnost. Jméno proměnné musí začínat písmenem. Proměnné se nedeklarují jako číselné nebo znakové. Chování proměnné se řídí podle kontextu, ve kterém se na ni odvoláváme.

$ cat scenar4 { print NR, $0 } $ awk -f scenar4 seznam1 1 Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytak Zdenek referent Horn Rene skladnik Zpracování textu $ cat scenar5 { a = $1 b = length($1) print "Jmeno = "a"\tdelka = "b } $ awk -f scenar5 seznam1 Jmeno = Pilny delka = 5 Jmeno = Zaruba delka = 6 Jmeno = Pritulny delka = 8 Jmeno = Bezzemek delka = 8 Jmeno = Kytak delka = 5 Jmeno = Horn delka = 4 $ cat scenar6 { prijem = $6 * 12 delka = length(prijem) print $2,$1"\t"prijem",- Kc/rok\t"delka"-ti ciferny" } $ awk -f scenar6 seznam1 Oto Pilny ,- Kc/rok 6-ti ciferny Zdenek Zaruba ,- Kc/rok 6-ti ciferny Ivo Pritulny ,- Kc/rok 6-ti ciferny Jan Bezzemek ,- Kc/rok 6-ti ciferny Zdenek Kytak ,- Kc/rok 6-ti ciferny Rene Horn 99072,- Kc/rok 5-ti ciferny

Zpracování textu Kromě vzorů zadávaných pomocí regulárních výrazů mohou být použity ve scénáři awk dva speciální vzory. BEGIN - činnost uvedená u tohoto vzoru se provádí před načtením prvního záznamu. END - činnost uvedená u tohoto vzoru se provádí po zpracování posledního záznamu. Vzor BEGIN musí být uveden jako první vzor, END musí být uveden jako poslední vzor. $ cat seznam Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $

Zpracování textu $ cat scenar7 BEGIN { print "*************************************************" print "*Prijmeni/Jmeno\tProfese\t\tCislo1\tCislo2\t*" print "*************************************************" } { print "*"$0"\t*" } END { print "*************************************************" } $ awk -f scenar7 seznam ************************************************* *Prijmeni/Jmeno Profese Cislo1 Cislo2 * ************************************************* *Pilny Oto vedouci * *Zaruba Zdenek manager * *Pritulny Ivo referent * *Bezzemek Jan referent * *Kytlink Zdenek referent * *Horn Rene skladnik * *************************************************

Zpracování textu Aritmetické operace +sčítání -odčítání *násobení /dělení %zbytek po celočíselném dělení ++inkrementace --dekrementace Relační operátory a b a = b a != b, a == b Operátory přiřazení a = b a += b a -= b a /= b a %= b

Zpracování textu $ cat scenar8 BEGIN { soucet = 0 pocet = 0 } { soucet += $5 pocet++ } END { print "Prumer polozky Cislo2 je: "soucet/pocet print "Vysledek operace 14 % 6 = "14%6 } $ awk -f scenar8 seznam Prumer polozky Cislo2 je: 42,1667 Vysledek operace 14 % 6 = 2 $

Zpracování textu Podmíněný příkaz má obecný tvar: if ( podmínka ) příkaz1 [else příkaz2] Podmínkou může být libovolný výraz nabývající buď pravdivé (nenulové) nebo nepravdivé (nulové) hodnoty. Příkaz může sestávat z libovolného počtu elementárních příkazů (print, =, if, for, while, break, continue), tyto musí být uzavřeny ve složených závorkách {}.

$ cat seznam Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $ cat scenar9 BEGIN { soucet=0 pocet=0 } { if ( $4 > 1963 ) { soucet += $5 pocet++ } } END { print "Prumer polozky Cislo2 pro Cislo1>1963 je: "soucet/pocet } Zpracování textu $ awk -f scenar9 seznam Prumer polozky Cislo2 pro Cislo1>1963 je: 44 $

$ cat seznam Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $ cat scenar10 BEGIN { soucet=0 pocet=0 } { if ( $3 == "referent" ) { soucet += $5 pocet++ } } END { print "Prumer polozky Cislo2 pro Referent je: "soucet/pocet } Zpracování textu $ awk -f scenar10 seznam Prumer polozky Cislo2 pro Referent je: 51,3333 $

Zpracování textu Příkaz awk nabízí dva operátory pro vytváření cyklů: while ( podmínka ) příkaz Pro podmínku platí stejná pravidla jako u operátoru if, chování iteračního operátoru je také zcela ve shodě se zaběhnutými pravidly. for ( inicializace ; podmínka ; reinicializace ) příkaz Chování operátoru je naprosto shodné jako u iterační struktury stejného jména pro jazyk C. Příkaz awk připouští použití vnořených cyklů. Lze použít příkazů break a continue pro známou modifikaci iterací.

Zpracování textu $ cat seznam Pilny Oto vedouci Zaruba Zdenek manager Pritulny Ivo referent Bezzemek Jan referent Kytlink Zdenek referent Horn Rene skladnik $ $ cat scenar11 /manager/ { for ( i=1 ; i <= NF ; i++ ) { if ( i == 4 ) continue print "Pole cislo "i"\t"$i } $ awk -f scenar11 seznam Pole cislo 1 Zaruba Pole cislo 2 Zdenek Pole cislo 3 manager Pole cislo 5 21 $

Zpracování textu Funkce printf Pomocí této funkce je umožněno komplexnější řízení výstupu, je shodná se stejnomennou funkcí jazyka C. Používá se formátovací specifikace a seznamu proměnných, které se mají tisknout. %d dekadické číslo %o oktalové číslo %x hexadecimální číslo %f plovoucí čárka %s řetězec znaků %c jeden znak Pokud chybí seznam vstupních souborů, čte awk standardní vstup. Pokud nechceme zpracování žádného textu, zadáme pro ukončení práce znak konec souboru (CTRL-d). Funkce jsou pro awk definované v rozsahu manuálu, mezi základní patří: length, exp, log, sqrt,...

Řádkový editor ed Jde o standardní součást každé instalace UNIXu, přes zdánlivou neohrabanost umožňuje veškeré editační operace, vedle interaktivního módu může pracovat i podle předem připraveného scénáře. Je-li argumentem při volání editoru ed jméno existujícího souboru, reaguje ed vypsáním počtu znaků v něm obsažených. Editor pracuje ve dvou režimech, příkazovém a zápisovém. Po spuštění je editor v příkazovém módu. a - přechod do zápisového módu. - přechod do příkazového módu Editovaný text je umístěný v dočasném bufferu v operační paměti a do fyzického souboru se přepíše teprve po příkazu w (vypíše se počet zapsaných znaků). Není-li při spuštění editoru uvedeno jméno již existujícího souboru, ed nemá žádnou odezvu a všechny znaky ukládá do dočasného bufferu. Pokud zadáme jméno existujícího souboru, ed vypíše počet znaků v souboru obsažených. Bez přechodu do zápisového módu ed interpretuje všechny znaky jako příkazy a při nekorektním zadání se hlásí znakem ?. Pro vytváření textu musíme zadat znak a. Ukončení práce - q (CTRL-d).

Řádkový editor ed Zobrazení textu K zobrazení textu slouží příkaz p. Vypíše se aktuální řádek. Pokud chceme zobrazit řádků více, musíme určit jejich adresy. $ ed ted 111 p ru ed 4p proto asi nebudu 1,5p ahoj ted pisi w textovem editoru ed a mam s nim neskonale problemy proto asi nebudu unix vubec 1,$p ahoj ted pisi w textovem editoru ed a mam s nim neskonale problemy proto asi nebudu unix vubec pouzivat ru ed $ $ cat ted ahoj ted pisi w textovem editoru ed a mam s nim neskonale problemy proto asi nebudu unix vubec pouzivat ru ed $

Řádkový editor ed Pokud se editoru něco nezdá v pořádku (snaha o ukončení bez uložení změn), ozve se znakem ?. Pokud trváme na příkazu q, napodruhé jej akceptuje. Mazání textu Pro mazání řádků slouží příkaz d, který pracuje obdobně jako p. $ ed ted 111 p ru ed d p pouzivat 3d p proto asi nebudu 1,2d p proto asi nebudu w 37 q $ $ cat ted ahoj ted pisi w textovem editoru ed a mam s nim neskonale problemy proto asi nebudu unix vubec pouzivat ru ed $ cat ted proto asi nebudu unix vubec pouzivat $

Řádkový editor ed $ ed ted 37 1p proto asi nebudu unix vubec + pouzivat + ? - unix vubec - proto asi nebudu - ? q $ K prohlížení následujících řádků textu nemusíme použít absolutní adresu řádku. Stačí klávesa Enter nebo příkaz +. Pro obrácený směr používáme příkaz -. Při snaze o zobrazení neexistujícího řádku se ed ozve znakem ?. Obecný formát příkazu: [adresa1,[adresa2]]příkaz[argument] Nepovinné parametry jsou v hranatých závorkách, příkaz ovlivní řádky dané rozsahen adres, není-li uvedena adresa2, platí příkaz pouze pro řádek adresa1, pokud nejsou adresy uvedeny, provede se příkaz pro aktuální řádek, příkaz je tvořen jedním znakem, argument je ta část textu, která má být modifikována, jméno souboru nebo další adresa řádku.