Páni

Jak používat AWK v Linuxu

Jak používat AWK v Linuxu

Nástroje, které Linux nabízí, se často řídí filozofií designu UNIX. Jakýkoli nástroj by měl být malý, pro vstupy / výstupy používat prostý text a pracovat modulárně. Díky tomuto odkazu máme některé z nejlepších funkcí pro zpracování textu pomocí nástrojů jako sed a awk.

V systému Linux je nástroj awk předinstalován ve všech distribucích systému Linux. AWK sám je programovací jazyk. Nástroj AWK je pouze tlumočník programovacího jazyka AWK. V této příručce se podívejte, jak používat AWK v systému Linux.

Použití AWK

Nástroj AWK je nejužitečnější, když jsou texty organizovány v předvídatelném formátu. Je to docela dobré při analýze a manipulaci s tabulkovými daty. Funguje po řádcích, na celém textovém souboru.

Výchozí chování awk je použití mezer (mezery, karty atd.).) pro oddělování polí. Naštěstí se mnoho konfiguračních souborů v systému Linux řídí tímto vzorem.

Základní syntaxe

Takto vypadá struktura příkazů awk.

$ awk '// ; ; '

Části příkazu jsou zcela vysvětlující. Awk může fungovat bez vyhledávací nebo akční části. Pokud není zadáno nic, bude výchozí akcí při shodě pouze tisk. Awk v zásadě vytiskne všechny shody nalezené v souboru.

Pokud není zadán žádný vyhledávací vzor, ​​pak awk provede zadané akce na každém jednotlivém řádku souboru.

Pokud jsou zadány obě části, pak awk použije vzor k určení, zda to aktuální řádek odráží. Pokud odpovídá, pak awk provede zadanou akci.

Všimněte si, že awk může pracovat také na přesměrovaných textech. Toho lze dosáhnout pipetováním obsahu příkazu, na který awk bude reagovat. Další informace o příkazu Linux pipe.

Pro ukázkové účely je zde ukázkový textový soubor. Obsahuje 10 řádků, 2 slova na řádek.

$ vzorek kočky.txt

Regulární výraz

Jednou z klíčových funkcí, díky nimž je awk mocným nástrojem, je podpora regulárního výrazu (zkráceně regex). Regulární výraz je řetězec, který představuje určitý vzor znaků.

Zde je seznam některých nejběžnějších syntaxí regulárních výrazů. Tyto syntaxe regulárního výrazu nejsou pro awk jedinečné. Jedná se o téměř univerzální syntaxe regulárního výrazu, takže jejich zvládnutí také pomůže v jiných aplikacích / programování, které zahrnují regulární výraz.

  • Základní znaky: Všechny alfanumerické znaky podtržítko (_) atd.
    • Sada znaků: Abychom to usnadnili, jsou v regexu skupiny znaků. Například velká písmena (A-Z), malá písmena (a-z) a číselné číslice (0-9).
  • Meta-znaky: Jedná se o postavy, které vysvětlují různé způsoby, jak rozšířit běžné postavy.
    • Doba (.): Jakákoli shoda znaků na dané pozici je platná (kromě nového řádku).
    • Hvězdička (*): Platí nula nebo více existencí bezprostředního znaku, který předchází.
    • Závorka ([]): Shoda je platná, pokud se na pozici shoduje některý ze znaků v závorce. Lze jej kombinovat se znakovými sadami.
    • Stříška (^): Zápas bude muset být na začátku řady.
    • Dolar ($): Zápas bude muset být na konci řádku.
    • Zpětné lomítko (\): Pokud je třeba použít jakýkoli metaznak v doslovném smyslu.

Tisk textu

Chcete-li vytisknout veškerý obsah textového souboru, použijte příkaz print. V případě vyhledávacího vzoru není definován žádný vzor. Awk tedy vytiskne všechny řádky.

$ awk 'print' ukázka.txt

Zde je „tisk“ příkaz AWK, který vytiskne obsah vstupu.

Hledání řetězců

AWK může provést základní textové vyhledávání daného textu. V části se vzorem musí být text, který se má najít.

V následujícím příkazu awk vyhledá text „quick“ na všech řádcích ukázky souboru.txt.

$ awk '/ quick /' vzorek.txt

Nyní použijeme několik regulárních výrazů k dalšímu doladění vyhledávání. Následující příkaz vytiskne všechny řádky, které mají na začátku „hnědou“ barvu.

$ awk '/ ^ hnědý /' vzorek.txt

Co takhle najít něco na konci řádku? Následující příkaz vytiskne všechny řádky, které mají na konci „quick“.

$ awk '/ quick $ /' vzorek.txt

Divoká karta vzor

Následující příklad předvede použití stříšky (.). Tady mohou být před znakem „e“ libovolné dva znaky.

$ awk '/… e /' vzorek.txt

Vzor divoké karty (s hvězdičkou)

Co když v místě může být libovolný počet znaků? Chcete-li se shodovat s jakýmkoli možným znakem na dané pozici, použijte hvězdičku (*). Zde AWK porovná všechny řádky, které mají po „tečce“ libovolný počet znaků.

$ awk '/ vzorek * /'.txt

Výraz závorky

Následující příklad předvede, jak používat výraz závorky. Výraz závorky říká, že na místě bude shoda platná, pokud odpovídá sadě znaků uzavřených v závorkách. Například následující příkaz bude odpovídat „The“ a „Tee“ jako platné shody.

$ awk '/ T [he] e /' vzorek.txt

V regulárním výrazu jsou některé předdefinované znakové sady. Například sada všech velkých písmen je označena jako „A – Z“. V následujícím příkazu bude awk odpovídat všem slovům, která obsahují velké písmeno.

$ awk '/ [A-Z] /' vzorek.txt

Podívejte se na následující použití znakových sad s výrazem závorky.

  • [0-9]: Označuje jednu číslici
  • [a-z]: Označuje jedno malé písmeno
  • [A-Z]: Označuje jedno velké písmeno
  • [a-zA-z]: Označuje jedno písmeno
  • [a-zA-z 0-9]: Označuje jeden znak nebo číslici.

Předdefinované proměnné awk

AWK přichází se spoustou předdefinovaných a automatických proměnných. Tyto proměnné mohou usnadnit psaní programů a skriptů pomocí AWK.

Zde jsou některé z nejběžnějších proměnných AWK, na které narazíte.

  • NÁZEV SOUBORU: Název aktuálního vstupního souboru.
  • RS: Oddělovač záznamů. Vzhledem k povaze AWK zpracovává data po jednom záznamu. Zde tato proměnná určuje oddělovač použitý k rozdělení datového proudu na záznamy. Ve výchozím nastavení je touto hodnotou znak nového řádku.
  • NR: Číslo aktuálního vstupního záznamu. Pokud je hodnota RS nastavena na výchozí hodnotu, pak tato hodnota označuje číslo aktuálního vstupního řádku.
  • FS / OFS: Znaky použité jako oddělovač polí. Po přečtení AWK rozdělí záznam do různých polí. Oddělovač je definován hodnotou FS. Při tisku se AWK znovu připojí ke všem polím. V tuto chvíli však AWK používá oddělovač OFS místo oddělovače FS. Obecně jsou FS i OFS stejné, ale není to povinné.
  • NF: Počet polí v aktuálním záznamu. Pokud se použije výchozí hodnota „mezery“, bude odpovídat počtu slov v aktuálním záznamu.
  • ORS: Oddělovač záznamů pro výstupní data. Výchozí hodnota je znak nového řádku.

Pojďme je zkontrolovat v akci. Následující příkaz použije proměnnou NR k tisku řádku 2 na řádek 4 ze vzorku.txt. AWK také podporuje logické operátory jako logické a (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

Chcete-li přiřadit konkrétní hodnotu proměnné AWK, použijte následující strukturu.

$ awk '// ; ; ' =,

Chcete-li například ze vstupního souboru odstranit všechny prázdné řádky, změňte hodnotu RS na v podstatě nic. Je to trik, který používá obskurní pravidlo POSIX. Určuje, že pokud je hodnota RS prázdný řetězec, pak jsou záznamy odděleny sekvencí, která se skládá z nového řádku s jedním nebo více prázdnými řádky. V POSIXu je prázdný řádek bez obsahu zcela prázdný. Pokud však řádek obsahuje mezery, není to považováno za „prázdné“.

$ awk 'print' RS = "ukázka.txt

Dodatečné zdroje

AWK je výkonný nástroj se spoustou funkcí. I když tato příručka pokrývá mnoho z nich, stále jde pouze o základy. Mastering AWK bude trvat víc než jen tohle. Tato příručka by měla být příjemným úvodem do nástroje.

Pokud si opravdu chcete nástroj osvojit, pak je zde několik dalších zdrojů, které byste si měli vyzkoušet.

  • Ořízněte prázdné znaky
  • Použití podmíněného příkazu
  • Tisk řady sloupců
  • Regulární výraz s AWK
  • 20 AWK příkladů

Internet je docela dobré místo, kde se něco naučit. Existuje spousta úžasných návodů na základy AWK pro velmi pokročilé uživatele.

Poslední myšlenka

Doufejme, že tato příručka pomohla dobře porozumět základům AWK. I když to může chvíli trvat, zvládnutí AWK je nesmírně obohacující, pokud jde o sílu, kterou poskytuje.

Šťastný výpočetní výkon!

Hry Battle For Wesnoth 1.13.6 Vývoj uvolněn
Battle For Wesnoth 1.13.6 Vývoj uvolněn
Battle For Wesnoth 1.13.6 vydané minulý měsíc, je šestým vývojovým vydáním v 1.13.série x a přináší řadu vylepšení, zejména do uživatelského rozhraní,...
Hry Jak nainstalovat League Of Legends na Ubuntu 14.04
Jak nainstalovat League Of Legends na Ubuntu 14.04
Pokud jste fanouškem League of Legends, pak je to pro vás příležitost otestovat běh League of Legends. Všimněte si, že LOL je podporován na PlayOnLinu...
Hry Nainstalujte si nejnovější strategickou hru OpenRA na Ubuntu Linux
Nainstalujte si nejnovější strategickou hru OpenRA na Ubuntu Linux
OpenRA je herní engine Libre / Free Real Time Strategy, který obnovuje rané hry Westwood, jako je klasický Command & Conquer: Red Alert. Distribuované...