Ú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ů).awk
pří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žítFS
pro 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,OFS
hodnota 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 .
awk
umožň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í .
awk
umožň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
ps
pří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
awk
spočí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