Příkaz awk provádí porovnávání vzorků se soubory. Je založen na programovacím jazyce AWK. Za klíčovým slovem awk následuje vzor, akce, která má být provedena, a název souboru. Akce, která má být provedena, je uvedena ve složených závorkách. Vzor a akce, která se má provést, by měly být specifikovány v jednoduchých uvozovkách. Pokud není vzor zadán, akce se provede se všemi vstupními daty; pokud však akce není zadána, vytiskne se celý řádek. Příkaz awk lze spustit z příkazového řádku nebo ze souboru skriptu awk.
Příkaz awk lze použít ke zpracování textových souborů různými způsoby, jako je extrahování textu, který odpovídá určitému vzoru; odstranění textu, který odpovídá určitému vzoru; přidání textu odpovídající určitému vzoru; a mnohem více.
Syntaxe
Syntaxe příkazu awk je:
# awk [options] ['patterns {actions}'] {file names}
Pokud při spouštění příkazu awk narazíte na níže uvedenou chybu:
můžete zkusit nainstalovat níže uvedený balíček podle vaší volby distribuce:
Distribuce OS | Příkaz |
---|---|
OS X | brew install awk |
Debian | apt-get install gawk |
Ubuntu | apt-get install gawk |
Alpine | apk přidat gawk |
Arch Linux | pacman -S gawk |
Kali Linux | apt-get install gawk |
CentOS | yum install gawk |
Fedora | dnf install gawk |
Raspbian | apt-get install gawk |
Příklady příkazů awk
1. Vytiskněte pátý sloupec (neboli pole) v souboru odděleném mezerou:
# awk '{print $5}' filename
2. Vytiskněte druhý sloupec řádků obsahujících „foo“ do souboru odděleného mezerami:
# awk '/foo/ {print $2}' filename
3. Vytiskněte poslední sloupec každého řádku v souboru a jako oddělovač polí použijte čárku (místo mezery):
# awk -F ',' '{print $NF}' filename
4. Sečtěte hodnoty v prvním sloupci souboru a vytiskněte součet:
# awk '{s+=$1} END {print s}' filename
5. Vytiskněte každý třetí řádek počínaje prvním řádkem:
# awk 'NR%3==1' filename
6. Vytiskněte různé hodnoty podle podmínek:
# awk '{if ($1 == "foo") print "Exact match foo"; else if ($1 ~ "bar") print "Partial match bar"; else print "Baz"}' filename
7. Vytiskněte všechny řádky, kde se hodnota 10. sloupce rovná zadané hodnotě:
# awk '($10 == value)'
8. Vytiskněte všechny řádky, jejichž hodnota 10. sloupce je mezi min a max:
# awk '($10 >= min_value && $10 <= max_value)'