AWK (Text Processing Language)

AWK (pojmenovaný podle autorů Aho, Weinberger, Kernighan) je nástroj pro manipulaci s daty, generování reportů a provádění výpočtů nad textovými soubory. Jeho největší síla spočívá v tom, že automaticky dělí každý řádek na jednotlivá pole (sloupce).

1. Základní princip fungování

AWK čte vstup řádek po řádku a pro každý řádek zkouší aplikovat zadaná pravidla ve formátu:

awk 'vzor { akce }' soubor

Pokud řádek odpovídá vzoru, provede se akce. Pokud vzor chybí, akce se provede pro každý řádek.

2. Práce se sloupci (Fields)

AWK standardně používá jako oddělovač sloupců mezeru nebo tabulátor.

$0: Celý aktuální řádek.

$1, $2, $3…: První, druhý, třetí sloupec.

NF: Počet sloupců na aktuálním řádku (Number of Fields).

NR: Číslo aktuálního řádku (Number of Records).

Příklad: Výpis konkrétních sloupců

ls -l | awk '{ print $9, $5 }'

Vypíše název souboru (5) z výstupu příkazu ls.

3. Pokročilé funkce a výpočty

AWK umí pracovat s proměnnými, podmínkami a cykly, což z něj dělá mocný analytický nástroj.

Úkol	Příkaz
Filtrování	awk '$3 > 500 { print $1 }' data.txt (vypíše 1. sloupec, pokud je ve 3. sloupci hodnota > 500)
Sčítání	awk '{ sum += $2 } END { print sum }' soubor (sečte všechny hodnoty v druhém sloupci)
Změna oddělovače	awk -F: '{ print $1 }' /etc/passwd (použije dvojtečku jako oddělovač a vypíše uživatelská jména)

4. Speciální bloky: BEGIN a END

BEGIN { … }: Provede se jednou před čtením prvního řádku (např. tisk záhlaví).

END { … }: Provede se jednou po zpracování posledního řádku (např. tisk celkového součtu).

5. Proč používat AWK místo sedu nebo Pythonu?

Rychlost psaní: Jednoduché analýzy napíšete jako „one-liner“ přímo do terminálu.

Efektivita: AWK je extrémně rychlé i pro zpracování obřích CSV souborů nebo systémových logů.

Nativní podpora sloupců: Zatímco v jiných jazycích musíte řádky složitě dělit (split), AWK to dělá automaticky.

Zajímavost: AWK je „datově řízený“ jazyk. To znamená, že nemusíte psát smyčku pro čtení souboru – AWK ji má v sobě zabudovanou a vy jen definujete, co se má stát s daty uvnitř.

Zpět na Linux