Obcování s ďáblem: Další kouzla, aneb awk - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Odkud pochází fotografka Anne Erhard?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Informace

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):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: