GNU/Linux >> Znalost Linux >  >> Linux

Příkaz AWK v Linuxu s příklady

Ú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žít FS pro opětovné přiřazení oddělovače jinému znaku (obvykle v BEGIN ).

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

Linux
  1. Linux Tee Command s příklady

  2. Příkaz linuxové hlavy s příklady

  3. JQ Command v Linuxu s příklady

  1. wc Linux Command s příklady

  2. Linux řazení příkazů s příklady

  3. Echo Command v Linuxu (s příklady)

  1. man Command v Linuxu s příklady

  2. Curl Command v Linuxu s příklady

  3. Echo Command v Linuxu s příklady