AWK je jedním z nejsilnějších nástrojů v Linux/UNIX shellu, který umožňuje efektivní zpracování a analýzu textových dat. Tento nástroj je obzvlášť užitečný při práci s výstupy příkazů, logovými soubory a různými textovými soubory, kde je potřeba vyhledávat, filtrovat a manipulovat s daty ve sloupcích. V tomto článku se podíváme na základní syntaxi AWK, jeho využití a pokročilé techniky, které vám umožní efektivně zpracovávat textová data v shellu.
AWK je nástroj pro zpracování textových dat, který umožňuje analýzu řádků textových souborů a provádění různých operací na základě zadaných vzorců (patternů). Na rozdíl od nástrojů jako grep
a sed
, které se zaměřují na vyhledávání a manipulaci s textem, AWK poskytuje větší flexibilitu při práci s textovými soubory, především při zpracování dat ve sloupcích.
Základní syntaxe AWK vypadá takto:
awk 'pattern {action}' soubor.txt
V tomto zápisu je pattern
podmínka, která určuje, na které řádky se bude akce vztahovat, a action
je příkaz, který se provede na těchto řádcích.
Příklad:
awk '{print $1}' soubor.txt
Tento příkaz vypíše první sloupec ze souboru soubor.txt
.
AWK je velmi flexibilní, protože můžete pracovat s různými formáty dat a aplikovat různé podmínky na výstup.
Jednou z největších výhod AWK je práce se sloupci. Každý řádek textového souboru je v AWK automaticky rozdělen na sloupce, které jsou odděleny mezerami nebo jinými oddělovači. Pro práci s těmito sloupci můžete použít speciální proměnné jako $1
, $2
, ..., které představují jednotlivé sloupce řádku.
Pokud chcete změnit výchozí oddělovač (který je mezera nebo tabulátor), můžete nastavit proměnnou FS
(Field Separator). Pro definici oddělovače můžete použít například čárku, středník nebo jiný znak:
awk 'BEGIN {FS=","} {print $1}' soubor.csv
Tento příkaz načte soubor soubor.csv
, kde jsou sloupce odděleny čárkami, a vypíše první sloupec.
Podobně můžete nastavit proměnnou OFS
(Output Field Separator), která určuje, jak budou oddělovány sloupce při výstupu:
awk 'BEGIN {OFS=";"} {print $1, $2}' soubor.txt
V tomto případě se sloupce budou při výstupu oddělovat středníkem.
AWK podporuje různé podmínky, které umožňují provádět akce na základě určitých kritérií. Můžete například použít podmínky jako if-else
, které jsou běžné v jiných programovacích jazycích.
Příklad použití podmínky if-else
v AWK:
awk '{if ($3 > 50) print $1, $2}' soubor.txt
Tento příkaz zkontroluje, zda je hodnota ve třetím sloupci větší než 50, a pokud ano, vypíše první dva sloupce.
AWK také poskytuje speciální bloky, jako BEGIN
a END
, které vám umožňují provést příkazy před začátkem zpracování souboru (v BEGIN
) nebo po jeho zpracování (v END
):
awk 'BEGIN {print "Začátek zpracování"} {print $1} END {print "Konec zpracování"}' soubor.txt
Pro formátování výstupu AWK nabízí příkaz printf
, který je velmi podobný funkci printf v C. Tento příkaz umožňuje přesné řízení formátu výstupu, včetně šířky polí, zarovnání, počtu desetinných míst a dalších.
Příklad:
awk '{printf "Jméno: %-10s Věk: %-3d\n", $1, $2}' soubor.txt
Tento příkaz formátuje výstup tak, že jméno bude mít šířku 10 znaků, a věk 3 znaky. Všechno bude zarovnáno podle zadaných parametrů.
Speciální formátovací značky zahrnují:
%-10s
: Zarovná text doleva na 10 znaků%3d
: Zobrazí celé číslo se šířkou 3 znaky%f
: Zobrazí číslo s plovoucí desetinnou čárkouAWK je ideální pro analýzu logů a generování reportů přímo z shellu. Můžete ho využít pro extrahování užitečných informací z logových souborů, jako jsou serverové logy, aplikační logy a další textové soubory.
Příklad analýzy logového souboru a generování reportu:
awk '{if ($3 == "ERROR") print $1, $2, $3}' log.txt
Tento příkaz vyhledá všechny řádky, kde je třetí sloupec „ERROR“, a vypíše první tři sloupce.
AWK vám umožní velmi rychle generovat reporty, filtrovat data a získávat potřebné informace bez nutnosti manuálního zpracování textových souborů.
Pokud se chcete naučit více o AWK a jeho využití při analýze a zpracování dat v shellu, neváhejte navštívit náš Kurz SHELL – Programování v UNIX shellu pro systémové administrátory, kde se naučíte, jak automatizovat úkoly a efektivně zpracovávat data pomocí shell skriptů.
Viac informacií preberáme na kurze: