Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Obcování s ďáblem: Další kouzla, aneb awk
24. ledna 2002, 00.00 | Poté, co jsme se naučili ovládat dávkový editor sed, podíváme se na další užitečný příkaz - awk. V mnoha ohledech je podobný sedu, ale jeho síla spočívá ve zpracování textu.
Podobně jako sed, i příkaz awk je vlastně dávkový editor, který čte text ze souboru nebo ze standardního vstupu, podle zadaného programu (či lépe skriptu) jej upraví, a výsledek zapíše na standardní výstup.Možnosti obou se do jisté míry překrývají, a na některé úkoly si můžeme vybrat kterýkoli z nich. Zatímco ale hlavní síla sedu, jak už víme, tkví především v jeho příkazu pro záměnu řetězců a regulárních výrazů, awk je určen hlavně pro zpracování "tabulek" — tj. textů, jejichž řádky jsou rozděleny na jednotlivá pole, z nichž každé obsahuje určitý údaj.
Dobrým příkladem takového textu může být např. výpis příkazu ls -l:
108 /tmp> ls -l [K-M]*
-rwxrwxrwx 1 ocs wheel 298791 Jan 21 22:57 Kapitola4.pdf*
-rw-r--r-- 1 ocs wheel 635686 Jan 21 22:57 Kapitola4.tar.gz
-rw-r--r-- 1 ocs wheel 50114 Jan 23 18:26 Letterbox169.tiff
109 /tmp>
První sloupec obsahuje přístupová práva, druhý počet linků, třetí jméno vlastníka,...
Základy
Neřekneme-li jinak, načítá příkaz awk postupně řádky vstupního textu; každý z nich rozdělí na jednotlivá pole (jako dělicí znak se standardně používá mezera), a pak nad řádkem provede zadaný skript.
V nejjednodušší případě je skript prostě skupina příkazů, zapsaná mezi složenými závorkami. Samozřejmě, že si postupně ukážeme řadu nejrůznějších příkazů, jimž awk rozumí; pro začátek však vystačíme s jediným: je jím příkaz print, jehož argumentem je prostě seznam věcí, jež se mají vytisknout.
Typickými argumenty příkazu print jsou odkazy na jednotlivá pole vstupního řádku. Ty mají formát $N, kde N je číslo pole od jedničky nahoru. (Mimochodem, je možné použít i nulu — výraz $0 representuje celý vstupní řádek.) Mezi argumenty mohou podle potřeby stát i řetězcové konstanty.
Jednoduchý příklad by mohl vypadat třeba takto: všimněte si na minulém výpisu, že jméno souboru je v devátém sloupci. Chceme-li tedy např. výpis souborů a jejich přístupových práv, můžeme použít třeba následující triviální skript:
118 /tmp> ls -l [K-M]* | awk '{ print $9,"has access rights:",$1 }'
Kapitola4.pdf* has access rights: -rwxrwxrwx
Kapitola4.tar.gz has access rights: -rw-r--r--
Letterbox169.tiff has access rights: -rw-r--r--
119 /tmp>
Výběr řádků
Podobně jako tomu bylo u příkazu sed, i awk umožňuje použít regulární výrazy (a jak si ukážeme příště, nejen je) pro výběr řádků, jež se mají zpracovat.
Nejjednodušší je práce s konstantními regulárními výrazy: ty prostě zapíšeme — stejně jako v sedu — mezi dvojici lomítek. Následující příklad např. vybere jen řádky, jež obsahují řetězec ".gz":
131 /tmp> ls -l [K-M]* | awk '/.gz/ { print $9,"has access rights:",$1 }'
Kapitola4.tar.gz has access rights: -rw-r--r--
132 /tmp>
Stejně jako v sedu můžeme použít také dvojici výrazů oddělených čárkou; v takovém případě awk příkaz použije na všechny řádky počínaje tím, jemuž odpovídá první výraz, a konče tím, jemuž odpovídá ten druhý.
Pro dnešek to stačí...
Pohrejte si sami s příkazem awk; uvidíte, že už samotné triviální základy, které jsme si dnes ukázali, nabízejí velice bohaté možnosti zpracování textů — a to jsme ještě ani pořádně nezačali!
Obsah seriálu (více o seriálu):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová