Pouze pro návštěvníky našeho blogu Získejte další 3 měsíce zdarma + 10% slevu na tříletý plán YSBLOG10
Chyťte dohodu

Vysvětlení příkazu Awk s praktickými příklady v roce 2026

Příkaz awk je Výkonný textový editor v Unixu/Linuxu, který prohledává text řádek po řádku, rozděluje text do polí a spouští pravidla akcí se vzory pro filtrování, transformaci a sumarizaci dat.

Vyniká v rychlých a jednoduchých postupech pro analýzu protokolů, CSV a systémových výstupů, což z něj činí nezbytný nástroj pro DevOps, SRE a zpracování dat z příkazového řádku. Pokud pracujete na linuxových serverech nebo... manage nasazení kódu, naučit se příkaz awk je jednou z nejužitečnějších dovedností, které si můžete osvojit.

Tato příručka pro začátečníky vysvětluje AWK krok za krokem s praktickými příklady, od jednoduchého tisku až po analýzu protokolů z reálného světa. Dozvíte se také tipy, které profesionálové denně používají v hostingových a cloudových prostředích.


Co je příkaz awk?

awk je řízený vzory jazyk pro zpracování dostupný na většině unixových systémů (Linux, macOS, BSD).

Příkaz Awk

Pojmenován po svých tvůrcích (Aho, Weinberger, Kernighan), čte vstup řádek po řádku (záznamy), rozděluje každý do polí a spouští akce, když se vzory shodují. Je ideální pro extrakci sloupců, filtrování řádků, výpočet agregací a vytváření rychlých sestav.

Na rozdíl od příkazů sed nebo grep, awk nativně rozumí „sloupcům“ a podporuje proměnné, pole, podmíněné výrazy a funkce s dostatečným výkonem, aby nahradil malé skripty, a zároveň zůstal lehký a rychlý.


Syntaxe a základy awk

Struktura akcí vzoru

V jádru jsou awk programy seznam pravidel typu pattern { action }. awk provede akci pouze pro řádky, kde se vzor shoduje. Bez vzoru se akce spustí pro všechny řádky. Bez akce se výchozí nastavením vypíší shodné řádky.

awk 'pattern { action }' file
awk '{ print $0 }' file          # print every line (default action shown explicitly)
awk '/error/' file               # print lines matching regex "error"

Pole, záznamy a oddělovače

awk rozděluje každý řádek (záznam) do polí pomocí oddělovače. Ve výchozím nastavení je oddělovačem polí (FS) libovolný bílý znak. Pole jsou přístupná jako $1, $2, … a celý řádek je $0. FS můžete změnit pomocí -F nebo uvnitř bloku BEGIN.

# space-separated
awk '{ print $1, $3 }' data.txt

# comma-separated (CSV-like)
awk -F, '{ print $1, $3 }' data.csv

# set output field separator for pretty printing
awk -F, 'BEGIN{ OFS="\t" } { print $1, $3 }' data.csv

Užitečné vestavěné proměnné

Běžné vestavěné funkce, které budete používat neustále:

  • NR: aktuální číslo záznamu (řádku)
  • FNR: aktuální číslo záznamu v aktuálním souboru
  • NF: počet polí na aktuálním řádku
  • FS/OFS: oddělovač vstupních/výstupních polí
  • RS/ORS: oddělovač vstupních/výstupních záznamů
  • $ 0: celý řádek; $1..$NF: pole
# print line number and first field
awk '{ print NR, $1 }' file

# print last field of each line
awk '{ print $NF }' file

Začínáme: Základní příklady awk

# Reorder fields 3 and 1; add a dash between
awk '{ print $3 "-" $1 }' access.log

# Print specific columns from top output (skip header)
top -b -n1 | awk 'NR>7 { print $1, $9, $12 }'

Filtrování řádků podle hodnoty nebo regulárního výrazu

# Lines where 3rd field equals "FAILED"
awk '$3=="FAILED"' audit.log

# Requests returning 500 status code in Nginx access log (status is $9 or $8 depending on format)
awk '$9==500' /var/log/nginx/access.log

# Regex match: case-insensitive search for "timeout"
awk 'tolower($0) ~ /timeout/' app.log

Výpočet součtů, průměrů a min/max

# Sum the 2nd column
awk '{ sum += $2 } END { print sum }' metrics.txt

# Average of column 4 (skip lines starting with #)
awk '$0 !~ /^#/ { n++; total += $4 } END { if (n>0) print total/n }' data.txt

# Track min and max
awk 'NR==1{min=max=$2} { if($2<min)min=$2; if($2>max)max=$2 } END{ print "min",min,"max",max }' stats.txt

Počítání jedinečných hodnot a četností

Asociativní pole zjednodušují seskupování.

# Count requests per IP (IP assumed to be $1)
awk '{ hits[$1]++ } END { for (ip in hits) print hits[ip], ip }' access.log | sort -nr | head

Práce s CSV a vlastními oddělovači

Pro jednoduchý CSV (bez uvozovek), -F, funguje. U složitějších CSV souborů může gawkův FPAT pomoci s porovnáváním polí jako tokenů, místo aby se oddělovala podle čárek.

# Basic CSV, print columns 1 and 3
awk -F, 'BEGIN{OFS=","} {print $1, $3}' users.csv

# gawk: handle commas inside quotes (basic FPAT pattern)
gawk 'BEGIN{ FPAT = "([^,]*)|(\"[^\"]+\")"; OFS="," } { print $1, $3 }' users.csv

Použijte bloky BEGIN a END

BEGIN se spustí před čtením vstupu; Příkaz END se spustí po zpracování všech řádků, což je praktické pro záhlaví, souhrny a jednorázové nastavení FS/OFS.

awk 'BEGIN{ print "User,Count" } { c[$1]++ } END{ for (u in c) print u, c[u] }' log.txt

Praktické případy použití v reálném světě


Analýza protokolů webových serverů (Apache/Nginx)

Operační týmy běžně používají awk k Řešení problémů s provozem, výkonem a zabezpečením. Příklady předpokládají běžný kombinovaný formát protokolu; upravte čísla polí podle skutečného formátu.

# Top 10 IPs by request volume
awk '{ ip=$1; hits[ip]++ } END{ for(ip in hits) print hits[ip], ip }' access.log | sort -nr | head -10

# Top 10 requested URLs (path often $7)
awk '{ path=$7; c[path]++ } END{ for(p in c) print c[p], p }' access.log | sort -nr | head -10

# Status code distribution (status often $9)
awk '{ sc=$9; c[sc]++ } END{ for(s in c) print s, c[s] }' access.log | sort -k1,1

# Total bytes sent (bytes often $10)
awk '$10 ~ /^[0-9]+$/ { bytes += $10 } END { print "Total bytes:", bytes }' access.log

Provést výstup AWK pro řazení, uniq nebo se podívejte na rychlé reporty. V kombinaci s grep můžete předfiltrovat data nebo virtuální hostitele.

Sledování metrik systému a aplikací

# CPU usage from mpstat: average user+system
mpstat 1 5 | awk '/Average/ { print "CPU %usr+%sys:", $3 + $5 }'

# Memory usage from /proc/meminfo
awk '/MemTotal/ {t=$2} /MemAvailable/ {a=$2} END{ printf "Mem Used: %.2f%%\n", (t-a)/t*100 }' /proc/meminfo

# Slow queries over 2s in application log (assuming duration is field 6 in seconds)
awk '$6+0 > 2 { print }' app.log

Čištění a transformace dat

# Normalize case and trim extra spaces
awk '{ gsub(/^ +| +$/,""); $0=tolower($0); print }' raw.txt

# Replace delimiter: tabs to commas
awk 'BEGIN{ OFS=","; FS="\t" } { print $1,$2,$3 }' input.tsv > output.csv

Spojení awk s dalšími nástroji CLI

awk září v pipelinech. Doplňuje grep (předfiltrování), sort (řazení), uniq (deduplikace) a sed (nahrazení textu). Každý z nástrojů používejte pro jeho nejlepší využití, aby příkazy byly malé a čitelné.


Pokročilé techniky AWK

Seskupování a agregace podle klíčů

# Revenue per customer (customer_id in $1, amount in $3)
awk -F, '{ rev[$1] += $3 } END { for (id in rev) printf "%s,%0.2f\n", id, rev[id] }' sales.csv | sort -t, -k2,2nr | head

Vzory rozsahů a zpracování více souborů

Vzory rozsahu se shodují od z jedné podmínky na druhou; FNR se resetuje pro každý soubor, NR je globální napříč všemi soubory.

# Print lines between markers
awk '/BEGIN_REPORT/,/END_REPORT/' app.log

# Compare corresponding lines across files
awk 'FNR==NR { a[$1]=$2; next } { print $0, a[$1] }' left.txt right.txt

Funkce, podmíněné výrazy a pole

# Derive buckets with if/else and functions
awk '{
  score=$2
  if (score>=90) grade="A"
  else if (score>=80) grade="B"
  else grade="C"
  print toupper($1), grade, length($1)
}' grades.txt

Tipy pro výkon a přenositelnost

  • Preferujte jednoduché vzory a minimální volání gsub na obrovských souborech.
  • Používejte číselná srovnání (např. $3+0 >= 100), aby se zabránilo sémantice řetězců.
  • Nastavit FS/OFS jednou v BEGIN kvůli konzistenci.
  • Pro velmi velká data, streamovat do externího řazení pro těžší řazení.
  • Držte se POSIXového awk kvůli přenositelnosti; v případě potřeby použijte funkce gawk (FPAT, asort).

Běžná úskalí a osvědčené postupy

  • cituji: Uzavřete programy AWK do jednoduchých uvozovek, aby se zabránilo rozbalování znaků v shellu. Uvozovky opatrně ukládejte do uvozovek.
  • Čísla polí: Formáty protokolů se liší; ověřte, který sloupec ve vašem prostředí obsahuje stav, cestu nebo bajty.
  • Složitost CSV: Skutečné CSV soubory obsahují uvozovky a nové řádky; pro robustní CSV zvažte gawk s FPAT nebo specializované nástroje jako Miller.
  • Místní: Řazení a převod velkých a malých písmen se může lišit v závislosti na lokalitě. Pro předvídatelné chování nastavte LC_ALL=C.
  • Testování: Začněte s malým vzorkem (hlavou) a postupně přidávejte podmínky.

awk vs sed vs grep: Kdy který použít

  • Použijte grep k nalezení čáry, které odpovídají vzoru (rychlé filtrování).
  • Použijte sed k nahrazení nebo upravte text na místě (editor streamu).
  • Použijte awk k analýze polí, vypočítat hodnoty, seskupit a shrnout (strukturované zpracování).

Grep pro zúžení vstupu, awk pro výpočet, sed pro čištění výstupu. Toto zaměření na pipeline first udržuje příkazové řádky efektivní a snadno udržovatelné.


Jak awk pomáhá hostingovým a DevOps týmům

Od odhalování zneužívaných IP adres až po kvantifikaci 5xx špiček, awk vám umožňuje převést nezpracované protokoly na odpovědi během několika sekund bez nutnosti náročného nástroje. V hostingových prostředích tato rychlost urychluje reakci na incidenty, plánování kapacity a ladění výkonu, zejména při SSH připojení k produkčním serverům s omezenými zdroji.

At YouStable, Naše managed hosting a VPS Zákazníci často požadují praktickou sledovatelnost bez složitých zásobníků. awk spolu se standardními linuxovými nástroji poskytuje okamžitý vhled.

Pokud chcete proaktivní monitorování, optimalizované webové balíčky a praktickou podporu, která mluví vaším jazykem, náš tým vám může pomoci s implementací těchto technik ve velkém měřítku.

Více praktických článků od AWK, které můžete znovu použít

# Remove duplicate lines while keeping first occurrence
awk '!seen[$0]++' file.txt

# Show lines with more than N fields (e.g., malformed)
awk 'NF > 10' data.txt

# Add header to computed report
awk 'BEGIN{print "status,count"} {c[$9]++} END{for(s in c) print s "," c[s]}' access.log

# Extract date (first field) and count per day
awk '{ d=$1; gsub(/\[|\]/,"",d); day=substr(d,1,11); hits[day]++ } END{ for (k in hits) print hits[k], k }' access.log | sort -nr

Nejčastější dotazy

K čemu se v Linuxu používá příkaz awk?

awk je jazyk pro zpracování textu pro skenování souborů řádek po řádku, rozdělení řádků do polí a spouštění pravidel akcí podle vzorů. Používá se k extrakci sloupců, filtrování řádků, výpočtu statistik, generování sestav a transformaci dat, zejména z protokolů, CSV a výstupů příkazů.

Jak mohu pomocí awk vytisknout konkrétní sloupce?

Pro odkazování na pole použijte $1, $2, …. Pro soubory CSV nastavte -F a volitelně OFS pro výstup. Příklad: awk -F, 'BEGIN{OFS=””} {print $1,$3}' soubor file.csv vytiskne první a třetí sloupec oddělený čárkami.

Jaký je rozdíl mezi NR a FNR v awk?

NR je celková čára počet napříč všemi vstupními soubory; neustále se zvyšuje. FNR je počet řádků v aktuálním souboru a resetuje se na 1, když awk spustí nový soubor. Použijte vzory FNR==NR k vytvoření vyhledávacích map z prvního souboru a poté zpracujte druhý.

Dokáže awk zpracovat složité soubory CSV s uvozovkami?

Základní AWK s -F, má problém, když pole obsahují čárky v uvozovkách. gawk to vylepšuje pomocí FPAT a definuje pole jako tokeny. Pro plně robustní CSV (uvozovky s řídicími znaky, nové řádky) zvažte specializované nástroje jako Miller nebo xsv.

Co je lepší: awk, sed nebo grep?

Řeší různé problémyPříkaz grep prohledává, sed upravuje streamy a awk analyzuje a počítá. Pro strukturovanou analýzu (sloupce, seskupování, součty) je awk nejlepší. Pro nejefektivnější a nejčitelnější příkazové řádky je zkombinujte v pipeline.

Zvládnutí příkazu awk se rychle vyplatí v jakémkoli pracovním postupu v Linuxu, DevOps nebo hostingu. Mějte tyto příklady po ruce, přizpůsobte je formátům protokolů a během několika sekund proměníte surový text v užitečné informace.

Sdílet přes:

Sanjeet Chauhan

Sanjeet Chauhan je bloger a SEO expert, který se věnuje pomoci webovým stránkám s organickým růstem. Sdílí praktické strategie, užitečné tipy a poznatky pro zvýšení návštěvnosti, zlepšení pozic ve vyhledávání a maximalizaci online přítomnosti.

Zanechat komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

Přejděte na začátek