Úvod
awk command je linuxový nástroj a programovací jazyk, který umožňuje uživatelům zpracovávat a manipulovat s daty a vytvářet formátované zprávy. Nástroj podporuje různé operace pro pokročilé zpracování textu a usnadňuje vyjádření složitých výběrů dat.
V tomto tutoriálu se dozvíte, co je awk příkaz dělá a jak jej používat.
Předpoklady
- Systém se systémem Linux.
- Přístup do okna terminálu.
Syntaxe příkazu AWK
Syntaxe pro awk příkaz je:
awk [options] 'selection_criteria {action}' input-file > output-file Dostupné možnosti jsou:
| Možnost | Popis |
|---|---|
-F [separator] | Slouží k určení oddělovače souborů. Výchozím oddělovačem je prázdné místo. |
-f [filename] | Slouží k určení souboru obsahujícího awk skript. Přečte awk zdroj programu ze zadaného souboru namísto prvního argumentu příkazového řádku. |
-v | Slouží k přiřazení proměnné. |
Jak funguje příkaz AWK?
awk hlavním účelem příkazu je provést vyhledávání informací a manipulaci s textem snadné provedení v Linuxu. Příkaz funguje tak, že skenuje sadu vstupních řádků v pořadí a hledá řádky odpovídající vzorům zadaným uživatelem.
Pro každý vzor mohou uživatelé určit akci, která se má provést na každém řádku, který odpovídá zadanému vzoru. Tedy pomocí awk , mohou uživatelé snadno zpracovávat složité soubory protokolů a vytvářet čitelné zprávy.
Operace AWK
awk umožňuje uživatelům provádět různé operace se vstupním souborem nebo textem. Některé z dostupných operací jsou:
- Skenujte soubor řádek po řádku.
- Rozdělte vstupní řádek/soubor do polí.
- Porovnejte vstupní řádek nebo pole se zadaným vzorem.
- Proveďte různé akce na odpovídajících řádcích.
- Formátujte výstupní řádky.
- Provádějte aritmetické operace a operace s řetězci.
- Používejte řídicí tok a smyčky na výstupu.
- Transformujte soubory a data podle zadané struktury.
- Generujte formátované přehledy.
Příkazy AWK
Příkaz poskytuje základní příkazy toku řízení (if-else , while , for , break ) a také umožňuje uživatelům seskupovat příkazy pomocí složených závorek {} .
- pokud je to jinak
if-else příkaz funguje tak, že vyhodnotí podmínku uvedenou v závorkách, a pokud je podmínka pravdivá, příkaz následující za if příkaz je proveden. else část je volitelná.
Například:
awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "No Duplicates"}}' answers.txt
Výstup zobrazuje řádky, ve kterých existují duplikáty, a uvádí Žádné duplikáty pokud v řádku nejsou žádné duplicitní odpovědi.
- zatímco
while příkaz opakovaně provádí cílový příkaz, dokud je zadaná podmínka pravdivá. To znamená, že funguje jako v programovacím jazyce C. Pokud je podmínka pravdivá, tělo smyčky se provede. Pokud je podmínka nepravdivá, awk pokračuje v provádění.
Například následující příkaz dává pokyn awk pro tisk všech vstupních polí jedno na řádek:
awk '{i=0; while(i<=NF) { print i ":"$i; i++;}}' employees.txt 
- pro
for příkaz také funguje jako příkaz C a umožňuje uživatelům vytvořit smyčku, která se musí provést určitý počet opakování.
Například:
awk 'BEGIN{for(i=1; i<=10; i++) print "The square of", i, "is", i*i;}'
Výše uvedený příkaz zvyšuje hodnotu i o jednu, dokud nedosáhne deseti a vypočítá druhou mocninu i pokaždé.
- přestávka
break příkaz okamžitě vystoupí z uzavírajícího while nebo for . Chcete-li zahájit další iteraci, použijte continue prohlášení.
next příkaz dává pokyn awk pro přeskočení na další záznam a zahájení skenování vzorů shora. exit příkaz dává pokyn awk že vstup skončil.
Následuje příklad break prohlášení:
awk 'BEGIN{x=1; while(1) {print "Example"; if ( x==5 ) break; x++; }}'
Výše uvedený příkaz přeruší smyčku po 5 iteracích.
Vzory AWK
Vložení vzoru před akci v awk funguje jako selektor . Selektor určuje, zda se má akce provést nebo ne. Následující výrazy mohou sloužit jako vzory:
- Regulární výrazy.
- Aritmetické relační výrazy.
- Výrazy s hodnotou řetězce.
- Libovolné logické kombinace výše uvedených výrazů.
Následující části vysvětlují výše uvedené výrazy a jak je používat.
Vzory regulárních výrazů
Vzory regulárních výrazů jsou nejjednodušší formou výrazů obsahujících řetězec znaků uzavřený lomítky. Může to být posloupnost písmen, čísel nebo kombinace obou.
V následujícím příkladu program vypíše všechny řádky začínající písmenem „A“. Pokud je zadaný řetězec součástí většího slova, vytiskne se také.
awk '$1 ~ /^A/ {print $0}' employees.txt
Vzory relačních výrazů
Jiný typ awk vzory jsou vztahové vzorce vyjadřování. Vzory relačních výrazů zahrnují použití libovolného z následujících relačních operátorů:<, <=, ==, !=,>= a > .
Následuje příklad awk vztahový výraz:
awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'
Vzory rozsahu
Vzor rozsahu je vzor skládající se ze dvou vzorů oddělené čárkou. Vzory rozsahu provádějí zadanou akci pro každý řádek mezi výskytem vzoru jedna a vzoru dva.
Například:
awk '/clerk/, /manager/ {print $1, $2}' employees.txt
Výše uvedený vzor říká awk vytisknout všechny řádky vstupu obsahující klíčová slova "úředník" a "manažer".
Speciální výrazové vzory
Mezi speciální výrazové vzory patří BEGIN a END které označují inicializaci a konec programu. BEGIN vzor odpovídá začátku vstupu před zpracováním prvního záznamu. END vzor odpovídá konci vstupu po zpracování posledního záznamu.
Můžete například zadat příkaz awk pro zobrazení zprávy na začátku a na konci procesu:
awk 'BEGIN { print "List of debtors:" }; {print $1, $2}; END {print "End of the debtor list"}' debtors.txt
Kombinování vzorů
awk umožňuje uživatelům kombinovat dva nebo více vzorů pomocí logických operátorů. Kombinované vzory mohou být libovolnou booleovskou kombinací vzorů. Logické operátory pro kombinování vzorů jsou:
||(nebo)&&(a)!(ne)
Například:
awk '$3 > 10 && $4 < 20 {print $1, $2}' employees.txt
Výstup vytiskne první a druhé pole těch záznamů, jejichž třetí pole je větší než deset a čtvrté pole menší než 20.
Proměnné AWK
awk má vestavěné proměnné pole, které rozdělují vstupní soubor na samostatné části zvané pole . awk přiřadí každému datovému poli následující proměnné:
$0. Používá se k určení celého řádku.$1. Určuje první pole.$2. Určuje druhé pole.- atd.
Další dostupné vestavěné awk proměnné jsou:
NR. Spočítá počet vstupních záznamů (obvykle řádků).awkpříkaz provede příkaz vzor/akce jednou pro každý záznam v souboru.
Například:
awk '{print NR,$0}' employees.txt
Příkaz zobrazí číslo řádku ve výstupu.
NF. Spočítá počet polí v aktuálním vstupním záznamu a zobrazí poslední pole souboru.
Například:
awk '{print $NF}' employees.txt 
FS. Obsahuje znak používaný k rozdělení polí na vstupním řádku. Výchozí oddělovač je mezera, ale můžete použítFSpro opětovné přiřazení oddělovače jinému znaku (obvykle vBEGIN).
Můžete například vytvořit etc/passwd soubor (seznam uživatelů) čitelnější změnou oddělovače z dvojtečky (: ) na pomlčku (/ ) a vytiskněte také oddělovač polí:
awk -FS 'BEGIN{FS=":"; OFS="-"} {print $0}' /etc/passwd 
RS. Uloží aktuální znak oddělovače záznamů. Výchozí vstupní řádek je vstupní záznam, díky kterému je nový řádek výchozím oddělovačem záznamů. Příkaz je užitečný, pokud je vstupem soubor oddělený čárkami (CSV).
Například:
awk 'BEGIN {FS="-"; RS=","; OFS=" owes Rs. "} {print $1,$2}' debtors.txt 
OFS. Ukládá oddělovač výstupních polí, který odděluje pole při tisku. Výchozím oddělovačem je prázdné místo. Kdykoli má tištěný soubor několik parametrů oddělených čárkami,OFShodnota se vytiskne mezi každý parametr.
Například:
awk 'OFS=" works as " {print $1,$3}' employees.txt
Akce AWK
awk nástroj se řídí pravidly obsahujícími dvojice vzor-akce. Akce se skládají z příkazů uzavřených ve složených závorkách {} které obsahují výrazy, řídicí příkazy, složené příkazy, vstupní a výstupní příkazy a příkazy pro odstranění. Tato prohlášení jsou popsána ve výše uvedených částech.
Vytvořte awk skript pomocí následující syntaxe:
awk '{action}' Například:
awk '{print "How to use the awk command"}'
Tento jednoduchý příkaz dává pokyn awk vytisknout zadaný řetězec při každém spuštění příkazu. Ukončete program pomocí Ctrl+D .
Jak používat příkaz AWK – příklady
Kromě manipulace s daty a vytváření formátovaných výstupů awk má i jiné využití, protože jde o skriptovací jazyk a nejen o příkaz pro zpracování textu. Tato část vysvětluje alternativní případy použití pro awk .
- Výpočty .
awkumožňuje provádět aritmetické výpočty. Například:
df | awk '/\/dev\/loop/ {print $1"\t"$2 + $3}'
V tomto příkladu zapojíme příkaz df a použijeme informace vygenerované v sestavě k výpočtu celkové paměti dostupné a používané připojenými souborovými systémy, které obsahují pouze /dev a /loop ve jménu.
Vytvořená zpráva ukazuje součet paměti /dev a /loop souborové systémy ve sloupcích dva a tři v df výstup.
- Filtrování .
awkumožňuje filtrovat výstup omezením délky řádků. Například:
awk 'length($0) > 8' /etc/shells
V tomto příkladu jsme spustili /etc/shells systémový soubor prostřednictvím awk a filtroval výstup tak, aby obsahoval pouze řádky obsahující více než 8 znaků.
- Monitorování . Zkontrolujte, zda v Linuxu běží určitý proces, pomocí kanálu
pspříkaz. Například:
ps -ef | awk '{ if($NF == "clipboard") print $0}'
Výstup vytiskne seznam všech procesů běžících na vašem počítači, přičemž poslední pole odpovídá zadanému vzoru.
- Počítání . Můžete použít
awkspočítat počet znaků v řádku a získat číslo vytištěné ve výsledku. Například:
awk '{ print "The number of characters in line", NR,"=" length($0) }' employees.txt