AWK je jedným z najsilnejších nástrojov v Linux/UNIX shelli, ktorý umožňuje efektívne spracovávanie a analýzu textových dát. Tento nástroj je obzvlášť užitočný pri práci s výstupmi príkazov, logovými súbormi a rôznymi textovými súbormi, kde je potrebné vyhľadávať, filtrovať a manipulovať s dátami v stĺpcoch. V tomto článku sa pozrieme na základnú syntax AWK, jeho využitie a pokročilé techniky, ktoré vám umožnia efektívne spracovať textové dáta v shelli.
AWK je nástroj na spracovanie textových dát, ktorý umožňuje analýzu riadkov textových súborov a vykonávanie rôznych operácií na základe zadaných vzorcov (patternov). Na rozdiel od nástrojov ako grep
a sed
, ktoré sa zameriavajú na vyhľadávanie a manipuláciu s textom, AWK poskytuje väčšiu flexibilitu pri práci s textovými súbormi, predovšetkým pri spracovaní dát v stĺpcoch.
Základná syntax AWK vyzerá takto:
awk 'pattern {action}' subor.txt
V tomto zápise je pattern
podmienka, ktorá určuje, na ktoré riadky sa bude akcia vzťahovať, a action
je príkaz, ktorý sa vykoná na týchto riadkoch.
Príklad:
awk '{print $1}' subor.txt
Tento príkaz vypíše prvý stĺpec zo súboru subor.txt
.
AWK je veľmi flexibilný, pretože môžete pracovať s rôznymi formátmi dát a aplikovať rôzne podmienky na výstup.
Jednou z najväčších výhod AWK je práca so stĺpcami. Každý riadok textového súboru je v AWK automaticky rozdelený na stĺpce, ktoré sú oddelené medzerami alebo inými oddeľovačmi. Pre prácu s týmito stĺpcami môžete použiť špeciálne premenné ako $1
, $2
, ..., ktoré predstavujú jednotlivé stĺpce riadka.
Ak chcete zmeniť predvolený oddeľovač (ktorý je medzera alebo tabulátor), môžete nastaviť premennú FS
(Field Separator). Pre definovanie oddeľovača môžete použiť napríklad čiarku, bodkočiarku alebo iný znak:
awk 'BEGIN {FS=","} {print $1}' subor.csv
Tento príkaz načíta súbor subor.csv
, kde sú stĺpce oddelené čiarkami, a vypíše prvý stĺpec.
Podobne môžete nastaviť premennú OFS
(Output Field Separator), ktorá určuje, ako budú oddeľované stĺpce pri výstupe:
awk 'BEGIN {OFS=";"} {print $1, $2}' subor.txt
V tomto prípade sa stĺpce budú pri výstupe oddeľovať bodkočiarkou.
AWK podporuje rôzne podmienky, ktoré umožňujú vykonávať akcie na základe určitých kritérií. Môžete napríklad použiť podmienky ako if-else
, ktoré sú bežné v iných programovacích jazykoch.
Príklad použitia podmienky if-else
v AWK:
awk '{if ($3 > 50) print $1, $2}' subor.txt
Tento príkaz skontroluje, či je hodnota v treťom stĺpci väčšia ako 50, a ak áno, vypíše prvé dva stĺpce.
AWK tiež poskytuje špeciálne bloky, ako BEGIN
a END
, ktoré vám umožňujú vykonať príkazy pred začiatkom spracovania súboru (v BEGIN
) alebo po jeho spracovaní (v END
):
awk 'BEGIN {print "Začiatok spracovania"} {print $1} END {print "Koniec spracovania"}' subor.txt
Na formátovanie výstupu AWK ponúka príkaz printf
, ktorý je veľmi podobný funkcii printf v C. Tento príkaz umožňuje presné riadenie formátu výstupu, vrátane šírky polí, zarovnávania, počtu desatinných miest a ďalších.
Príklad:
awk '{printf "Meno: %-10s Vek: %-3d\n", $1, $2}' subor.txt
Tento príkaz formátuje výstup tak, že meno bude mať šírku 10 znakov, a vek 3 znaky. Všetko bude zarovnané podľa zadaných parametrov.
Špeciálne formátovacie značky zahŕňajú:
: Zarovná text doľava na 10 znakov
%3d
: Zobrazí celé číslo so šírkou 3 znaky%f
: Zobrazí číslo s plávajúcou desatinnou čiarkouAWK je ideálny na analýzu logov a generovanie reportov priamo z shellu. Môžete ho využiť na extrahovanie užitočných informácií z logových súborov, ako sú serverové logy, aplikačné logy a ďalšie textové súbory.
Príklad analýzy logového súboru a generovanie reportu:
awk '{if ($3 == "ERROR") print $1, $2, $3}' log.txt
Tento príkaz vyhľadá všetky riadky, kde je tretí stĺpec „ERROR“, a vypíše prvé tri stĺpce.
AWK vám umožní veľmi rýchlo generovať reporty, filtrovať dáta a získať potrebné informácie bez potreby manuálneho spracovávania textových súborov.
Ak sa chcete naučiť viac o AWK a jeho využití pri analýze a spracovaní dát v shelli, neváhajte navštíviť náš Kurz shell – Programovanie v UNIX shelli pre systémových administrátorov, kde sa naučíte, ako zautomatizovať úlohy a efektívne spracovávať dáta pomocou shell skriptov.
Viac informacií preberáme na kurze: