GNU/Linux >> Znalost Linux >  >> Linux

Praktický průvodce učením awk

Ze všech linuxových příkazů (a je jich mnoho) se zdají tři nejpodstatnější sed , awk a grep . Možná je to tajemným zvukem jejich jmen nebo šířkou jejich potenciálního využití nebo jen jejich věkem, ale když někdo uvádí příklad příkazu „Linuxy“, je to obvykle jeden z těchto tří. A zatímco sed a grep mají několik jednoduchých jednořádkových standardů, méně prestižní awk zůstává trvale prominentní, protože je obzvláště matoucí.

Pravděpodobně použijete sed pro rychlou výměnu řetězce nebo grep pro každodenní filtrování vzoru. Je mnohem méně pravděpodobné, že vytvoříte awk příkaz. Často se divím, proč tomu tak je, a přisuzuji to několika věcem. Za prvé, mnoho z nás téměř nepoužívá sed a grep pro cokoliv kromě nějaké variace na tyto dva příkazy:

$ sed -e 's/foo/bar/g' file.txt
$ grep foo file.txt

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Takže i když se můžete cítit pohodlněji s sed a grep , možná nevyužijete jejich plný potenciál. Samozřejmě neexistuje žádná povinnost dozvědět se více o sed nebo grep , ale někdy se divím, jak se "učím" příkazy. Místo učení jak příkaz funguje, často se naučím konkrétní zaklínadlo, které obsahuje příkaz. V důsledku toho často cítím falešnou obeznámenost s příkazem. Myslím, že znám příkaz, protože dokážu vyjmenovat tři nebo čtyři možnosti z hlavy, i když nevím, co tyto možnosti dělají, a nedokážu se přesně dotknout syntaxe.

A to je podle mého názoru problém, kterému čelí mnoho lidí, když jsou konfrontováni se silou a flexibilitou awk .

Naučení awk používat awk

Základy awk jsou překvapivě jednoduché. Často se uvádí, že awk je programovací jazyk, a přestože jde o relativně základní jazyk, je to pravda. To znamená, že se můžete naučit awk stejným způsobem, jakým se učíte nový kódovací jazyk:naučte se jeho syntaxi pomocí několika základních příkazů, naučte se jeho slovní zásobu, abyste mohli stavět na složité akce, a pak cvičte, cvičte, procvičujte.

Jak awk analyzuje vstup

Awk vidí vstup v podstatě jako pole. Když awk prohledá textový soubor, zachází s každým řádkem, jednotlivě a postupně, jako záznam . Každý záznam je rozdělen do polí . Samozřejmě, awk musí tyto informace sledovat a můžete je zobrazit pomocí NR (počet záznamů) a NF (počet polí) vestavěné proměnné. Například získáte počet řádků souboru:

$ awk 'END { print NR;}' example.txt
36

To také prozrazuje něco o awk syntax. Ať už píšete awk jako jednořádkový nebo jako samostatný skript, struktura awk instrukce je:

pattern or keyword { actions }

V tomto příkladu slovo END je speciální, vyhrazené klíčové slovo spíše než vzor. Podobné klíčové slovo je BEGIN . S oběma těmito klíčovými slovy awk pouze provede akci ve složených závorkách na začátku nebo na konci analýzy dat.

Můžete použít vzor jako filtr nebo kvalifikátor, takže awk provede danou akci pouze tehdy, když je schopen porovnat váš vzor s aktuálním záznamem. Předpokládejme například, že chcete použít awk , stejně jako byste to udělali grep , abyste našli slovo Linux v souboru textu:

$ awk '/Linux/ { print $0; }' os.txt
OS: CentOS Linux (10.1.1.8)
OS: CentOS Linux (10.1.1.9)
OS: Red Hat Enterprise Linux (RHEL) (10.1.1.11)
OS: Elementary Linux (10.1.2.4)
OS: Elementary Linux (10.1.2.5)
OS: Elementary Linux (10.1.2.6)

Pro awk , každý řádek v souboru je záznam a každé slovo v záznamu je pole. Ve výchozím nastavení jsou pole oddělena mezerou. Můžete to změnit pomocí --field-separator možnost, která nastavuje FS (oddělovač polí) proměnná na cokoliv, co chcete, aby to bylo:

$ awk --field-separator ':' '/Linux/ { print $2; }' os.txt 
 CentOS Linux (10.1.1.8)
 CentOS Linux (10.1.1.9)
 Red Hat Enterprise Linux (RHEL) (10.1.1.11)
 Elementary Linux (10.1.2.4)
 Elementary Linux (10.1.2.5)
 Elementary Linux (10.1.2.6)

V této ukázce je před každým záznamem prázdné místo, protože za každým dvojtečkou je prázdné místo (: ) ve zdrojovém textu. Toto není cut , takže oddělovač polí nemusí být omezen na jeden znak:

$ awk --field-separator ': ' '/Linux/ { print $2; }' os.txt 
CentOS Linux (10.1.1.8)
CentOS Linux (10.1.1.9)
Red Hat Enterprise Linux (RHEL) (10.1.1.11)
Elementary Linux (10.1.2.4)
Elementary Linux (10.1.2.5)
Elementary Linux (10.1.2.6)

Funkce v awk

V awk si můžete vytvořit své vlastní funkce pomocí této syntaxe:

name(parameters) { actions }

Funkce jsou důležité, protože vám umožňují napsat kód jednou a znovu jej použít během vaší práce. Při vytváření jednoduchých řádků jsou vlastní funkce o něco méně užitečné než ve skriptech, ale awk již pro vás definuje mnoho funkcí. Fungují v zásadě stejně jako jakákoli funkce v jakémkoli jiném jazyce nebo tabulce:Naučíte se, v jakém pořadí funkce od vás potřebuje informace, a můžete do ní dávat, co chcete, abyste získali výsledky.

Existují funkce pro provádění matematických operací a zpracování řetězců. Ty matematické jsou často poměrně jednoduché. Zadáte číslo a ono to rozdrtí:

$ awk 'BEGIN { print sqrt(1764); }'
42

Řetězcové funkce mohou být složitější, ale jsou dobře zdokumentovány v příručce GNU awk. Například split funkce přebírá entitu, která awk pohledy jako jedno pole a rozdělí je na různé části. Vyžaduje pole, proměnnou, která se má použít jako pole obsahující každou část rozdělení, a znak, který chcete použít jako oddělovač.

Pomocí výstupu z předchozích příkladů vím, že na samém konci každého záznamu je IP adresa. V tomto případě mohu odeslat pouze poslední pole záznamu do split funkce odkazem na proměnnou NF protože obsahuje počet polí (a konečné pole musí být nejvyšší číslo):

$ awk --field-separator ': ' '/Linux/ { split($NF, IP, "."); print "subnet: " IP[3]; }' os.txt
subnet: 1
subnet: 1
subnet: 1
subnet: 2
subnet: 2
subnet: 2

Existuje mnoho dalších funkcí a není důvod se omezovat na jednu na blok awk kód. Pomocí awk můžete vytvářet složité kanály ve vašem terminálu, nebo můžete napsat awk skripty k definování a využití vašich vlastních funkcí.

Stáhněte si e-knihu

Učení awk je většinou záležitostí použití awk . Použijte jej, i když to znamená duplikování funkcí, které již máte s sed nebo grep nebo cut nebo tr nebo jakékoli jiné dokonale platné příkazy. Jakmile si s tím zvyknete, můžete psát funkce Bash, které vyvolají vaše vlastní awk příkazy pro snadnější použití. A nakonec budete schopni psát skripty pro analýzu složitých datových sad.

Stáhněte si naše elektronická kniha  se dozvíte vše, co potřebujete vědět o awk a začněte jej používat ještě dnes.


Linux
  1. Průvodce pro začátečníky firewallem v Linuxu

  2. Průvodce pro začátečníky koukáním

  3. Mých 8 oblíbených praktických linuxových příkazů

  1. Průvodce instalací aplikací na Linuxu

  2. Naučit se milovat systemd

  3. Průvodce pro začátečníky oprávněními pro Linux

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

  2. Linux Commands - Kompletní průvodce

  3. Příkaz awk v Linuxu