====== 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 ($9) a jeho velikost ($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ř. [[it_encyklopedie:linux_rozcestnik|Zpět na Linux]]