Příkazy A-Z

40 Praktické a užitečné příkazy awk v Linuxu a BSD

40 Praktické a užitečné příkazy awk v Linuxu a BSD

AWK je výkonný programovací jazyk založený na datech, jehož počátky sahají až do počátků Unixu. Původně byl vyvinut pro psaní „jednorázových“ programů, ale od té doby se vyvinul do plnohodnotného programovacího jazyka. AWK dostává své jméno podle iniciál svých autorů - Aho, Weinbergera a Kernighana. Příkaz awk v systému Linux a dalších systémech Unix vyvolá tlumočníka, který spouští skripty AWK. V nedávných systémech existuje několik implementací awk, například gawk (GNU awk), mawk (Minimal awk) a nawk (New awk). Chcete-li zvládnout awk, podívejte se na níže uvedené příklady.

Porozumění programům AWK


Programy napsané v awk se skládají z pravidel, která jsou jednoduše dvojicí vzorů a akcí. Vzory jsou seskupeny do složené závorky a akční část se spustí vždy, když awk najde texty, které odpovídají vzoru. Ačkoli byl awk vyvinut pro psaní jednorázových linek, zkušení uživatelé s ním mohou snadno psát složité skripty.

Programy AWK jsou velmi užitečné pro zpracování souborů ve velkém měřítku. Identifikuje textová pole pomocí speciálních znaků a oddělovačů. Nabízí také programovací konstrukce na vysoké úrovni, jako jsou pole a smyčky. Psaní robustních programů pomocí prostého awk je tedy velmi možné.

Praktické příklady příkazu awk v systému Linux


Správci obvykle používají awk k extrakci dat a vytváření zpráv společně s jinými typy manipulace se soubory. Níže jsme probrali awk podrobněji. Postupujte podle pokynů pečlivě a vyzkoušejte je ve svém terminálu pro úplné pochopení.

1. Tisk konkrétních polí z textového výstupu


Nejčastěji používané příkazy Linuxu zobrazují svůj výstup pomocí různých polí. Normálně používáme příkaz Linux cut pro extrahování konkrétního pole z těchto dat. Níže uvedený příkaz vám však ukazuje, jak to provést pomocí příkazu awk.

$ kdo | awk 'print $ 1'

Tento příkaz zobrazí pouze první pole z výstupu příkazu who. Takže jednoduše získáte uživatelská jména všech aktuálně přihlášených uživatelů. Tady, 1 $ představuje první pole. Musíte použít $ N pokud chcete extrahovat N-té pole.

2. Tisk více polí z textového výstupu


Tlumočník awk nám umožňuje tisknout libovolný počet polí, která chceme. Níže uvedené příklady nám ukazují, jak extrahovat první dvě pole z výstupu příkazu who.

$ kdo | awk 'print $ 1, $ 2'

Můžete také řídit pořadí výstupních polí. Následující příklad nejprve zobrazí druhý sloupec vytvořený příkazem who a poté první sloupec v druhém poli.

$ kdo | awk 'print $ 2, $ 1'

Jednoduše vynechejte parametry pole ($ N) pro zobrazení celých dat.

3. Použijte ZAČÍNAT příkazy


Příkaz BEGIN umožňuje uživatelům vytisknout na výstup některé známé informace. Obvykle se používá pro formátování výstupních dat generovaných awk. Syntaxe tohoto příkazu je uvedena níže.

ZAČNĚTE Akce AKCE

Akce, které tvoří sekci ZAČÁTEK, se vždy spustí. Pak awk přečte zbývající řádky jeden po druhém a uvidí, jestli je třeba něco udělat.

$ kdo | awk 'BEGIN print "User \ tFrom" print $ 1, $ 2'

Výše uvedený příkaz označí dvě výstupní pole extrahovaná z výstupu příkazu who.

4. Použijte příkazy KONEC


Můžete také použít příkaz KONEC, abyste se ujistili, že určité akce budou vždy provedeny na konci vaší operace. Jednoduše umístěte sekci KONEC po hlavní sadě akcí.

$ kdo | awk 'BEGIN print "User \ tFrom" print $ 1, $ 2 END print "--COMPLETED--"'

Výše uvedený příkaz připojí daný řetězec na konec výstupu.

5. Hledání pomocí vzorů


Velká část fungování awk zahrnuje porovnávání vzorů a regex. Jak jsme již diskutovali, awk hledá vzory v každém vstupním řádku a akci provede pouze při spuštění shody. Naše předchozí pravidla se skládala pouze z akcí. Níže jsme ilustrovali základy porovnávání vzorů pomocí příkazu awk v Linuxu.

$ kdo | awk '/ mary / print'

Tento příkaz uvidí, zda je uživatel mary aktuálně přihlášen nebo ne. Bude nalezen celý řádek, pokud bude nalezena shoda.

6. Extrahujte informace ze souborů


Příkaz awk pracuje se soubory velmi dobře a lze jej použít pro složité úlohy zpracování souborů. Následující příkaz ukazuje, jak awk zpracovává soubory.

$ awk '/ hello / print' / usr / share / dict / americko-anglický

Tento příkaz vyhledá vzor „ahoj“ v americko-anglickém slovníku. Je k dispozici na většině distribucí založených na Linuxu. V tomto souboru tedy můžete snadno vyzkoušet awk programy.

7. Přečtěte si skript AWK ze zdrojového souboru


Ačkoli je psaní jednorázových programů užitečné, můžete také psát velké programy pomocí awk úplně. Budete je chtít uložit a spustit program pomocí zdrojového souboru.

$ awk -f script-file $ awk --file script-file

The -F nebo -soubor Možnost nám umožňuje určit programový soubor. Ve skriptu však nemusíte používat uvozovky ("), protože linuxový shell nebude takto programový kód interpretovat.

8. Nastavte oddělovač vstupního pole


Oddělovač polí je oddělovač, který rozděluje vstupní záznam. Můžeme snadno určit oddělovače polí awk pomocí -F nebo -oddělovač polí volba. Podívejte se na níže uvedené příkazy, abyste zjistili, jak to funguje.

$ echo "Toto je jednoduchý příklad" | awk -F - 'print $ 1' $ echo "This-is-a-simple-example" | awk --field-separator - 'print $ 1'

Funguje stejně, když používáte soubory skriptu namísto jednorázového příkazu awk v Linuxu.

9. Tisk informací podle stavu


O příkazu Linux cut jsme hovořili v předchozím průvodci. Nyní vám ukážeme, jak extrahovat informace pomocí awk pouze při splnění určitých kritérií. Budeme používat stejný testovací soubor, který jsme použili v této příručce. Takže jděte tam a pořiďte si kopii test.txt soubor.

$ awk '$ 4> 50' test.txt

Tento příkaz vytiskne z testu všechny národy.Soubor txt, který má více než 50 milionů obyvatel.

10. Tiskněte informace porovnáním regulárních výrazů


Následující příkaz awk zkontroluje, zda třetí pole libovolného řádku obsahuje vzor „Lira“, a vytiskne celý řádek, pokud je nalezena shoda. Znovu používáme test.Soubor txt používaný k ilustraci příkazu Linux cut. Než budete pokračovat, ujistěte se, že máte tento soubor.

$ awk '$ 3 ~ / Lira /' test.txt

Můžete se rozhodnout vytisknout pouze konkrétní část jakékoli shody, pokud chcete.

11. Spočítejte celkový počet řádků na vstupu


Příkaz awk má mnoho speciálních proměnných, které nám umožňují snadno provádět mnoho pokročilých věcí. Jednou takovou proměnnou je NR, která obsahuje číslo aktuálního řádku.

$ awk 'END print NR' test.txt

Tento příkaz vygeneruje, kolik řádků je v našem testu.soubor txt. Nejprve iteruje přes každý řádek a jakmile dosáhne END, vytiskne hodnotu NR - která v tomto případě obsahuje celkový počet řádků.

12. Nastavte oddělovač výstupního pole


Dříve jsme si ukázali, jak vybrat oddělovače vstupních polí pomocí -F nebo -oddělovač polí volba. Příkaz awk nám také umožňuje určit oddělovač výstupního pole. Níže uvedený příklad to ukazuje na praktickém příkladu.

$ datum | awk 'OFS = "-" tisk 2 $, 3 $, 6 $'

Tento příkaz vytiskne aktuální datum ve formátu dd-mm-rr. Spusťte datový program bez awk a podívejte se, jak vypadá výchozí výstup.

13. Použití If Construct


Stejně jako ostatní populární programovací jazyky poskytuje awk uživatelům také konstrukce if-else. Příkaz if v awk má níže uvedenou syntaxi.

if (výraz) first_action second_action

Odpovídající akce se provádějí, pouze pokud je podmíněný výraz true. Níže uvedený příklad to ukazuje pomocí našeho referenčního souboru test.txt.

$ awk 'if ($ 4> 100) print' test.txt

Odsazení nemusíte striktně udržovat.

14. Používání konstrukcí If-Else


Pomocí níže uvedené syntaxe můžete vytvořit užitečné žebříčky if-else. Jsou užitečné při vytváření složitých awk skriptů, které se zabývají dynamickými daty.

if (výraz) first_action else second_action
$ awk 'if ($ 4> 100) tisk; else print 'test.txt

Výše uvedený příkaz vytiskne celý referenční soubor, protože čtvrté pole není větší než 100 pro každý řádek.

15. Nastavte šířku pole


Někdy jsou vstupní data velmi chaotická a uživatelé mohou mít potíže s vizualizací ve svých sestavách. Naštěstí awk poskytuje výkonnou vestavěnou proměnnou s názvem FIELDWIDTHS, která nám umožňuje definovat seznam šířek oddělených mezerami.

$ echo 5675784464657 | awk 'BEGIN FIELDWIDTHS = "3 4 5" tisk $ 1, $ 2, $ 3'

Je to velmi užitečné při analýze rozptýlených dat, protože můžeme řídit šířku výstupního pole přesně tak, jak chceme.

16. Nastavte oddělovač záznamů


RS nebo Record Separator je další vestavěná proměnná, která nám umožňuje určit, jak jsou záznamy odděleny. Nejprve vytvořme soubor, který předvede fungování této proměnné awk.

$ kočka nová.txt Melinda James 23 New Hampshire (222) 466-1234 Daniel James 99 Phonenix Road (322) 677-3412
$ awk 'BEGIN FS = "\ n"; tisk $ 1, $ 3' nový.txt

Tento příkaz provede analýzu dokumentu a vyplivne jméno a adresu těchto dvou osob.

17. Proměnné prostředí tisku


Příkaz awk v Linuxu nám umožňuje snadno tisknout proměnné prostředí pomocí proměnné ENVIRON. Níže uvedený příkaz ukazuje, jak to použít pro tisk obsahu proměnné PATH.

$ awk 'BEGIN print ENVIRON ["PATH"]'

Obsah libovolných proměnných prostředí můžete vytisknout nahrazením argumentu proměnné ENVIRON. Níže uvedený příkaz vytiskne hodnotu proměnné prostředí HOME.

$ awk 'ZAČÍT tisknout ENVIRON ["HOME"]'

18. Vynechat některá pole z výstupu


Příkaz awk nám umožňuje z našeho výstupu vynechat konkrétní řádky. Následující příkaz to předvede pomocí našeho referenčního souboru test.txt.

$ awk -F ":" '$ 2 = ""; print 'test.txt

Tento příkaz vynechá druhý sloupec našeho souboru, který obsahuje název hlavního města pro každou zemi. Můžete také vynechat více než jedno pole, jak ukazuje následující příkaz.

$ awk -F ":" '$ 2 = ""; $ 3 = ""; tisk' test.txt

19. Odstraňte prázdné řádky


Data mohou někdy obsahovat příliš mnoho prázdných řádků. Pomocí příkazu awk můžete prázdné řádky snadno odstranit. Podívejte se na další příkaz a podívejte se, jak to funguje v praxi.

$ awk '/ ^ [\ t] * $ / next print' nové.txt

Ze souboru jsme odstranili všechny prázdné řádky nové.txt pomocí jednoduchého regulárního výrazu a vestavěného awk s názvem next.

20. Odstraňte koncové mezery


Výstup mnoha příkazů Linuxu obsahuje koncové mezery. Můžeme použít příkaz awk v Linuxu k odstranění takových mezer, jako jsou mezery a karty. Podívejte se na níže uvedený příkaz, abyste zjistili, jak řešit takové problémy pomocí awk.

$ awk 'sub (/ [\ t] * $ /, ""); tisk' nové.txt test.txt

Přidejte do našich referenčních souborů několik koncových mezer a ověřte, zda je awk úspěšně odstranil nebo ne. Udělal to úspěšně v mém stroji.

21. Zkontrolujte počet polí v každém řádku


Můžeme snadno zkontrolovat, kolik polí je v řádku pomocí jednoduché awk jednorázové. Existuje mnoho způsobů, jak toho dosáhnout, ale pro tento úkol použijeme některé vestavěné proměnné awk. Proměnná NR nám dává číslo řádku a proměnná NF počet polí.

$ awk 'print NR, "->", NF' test.txt

Nyní můžeme potvrdit, kolik polí je na řádku v našem test.txt dokument. Protože každý řádek tohoto souboru obsahuje 5 polí, jsme si jisti, že příkaz pracuje podle očekávání.

22. Ověřte aktuální název souboru


Proměnná awk FILENAME se používá k ověření aktuálního vstupního názvu souboru. Demonstrujeme, jak to funguje, na jednoduchém příkladu. Může to však být užitečné v situacích, kdy název souboru není znám explicitně nebo existuje více než jeden vstupní soubor.

$ awk 'print FILENAME' test.txt $ awk 'print FILENAME' test.txt nové.txt

Výše uvedené příkazy vytisknou název souboru awk, na kterém pracuje pokaždé, když zpracuje nový řádek vstupních souborů.

23. Ověřte počet zpracovaných záznamů


Následující příklad předvede, jak můžeme ověřit počet záznamů zpracovaných příkazem awk. Jelikož velký počet správců systému Linux používá awk pro generování zpráv, je pro ně velmi užitečné.

$ awk 'tisk "Zpracování záznamu -", NR; KONEC tisk "\ nCelkový počet zpracovaných záznamů:", NR;' test.txt

Tento úryvek awk často používám pro jasný přehled o mých akcích. Můžete jej snadno vyladit, aby vyhovoval novým nápadům nebo činům.

24. Vytiskněte celkový počet znaků v záznamu


Jazyk awk poskytuje užitečnou funkci zvanou length (), která nám říká, kolik znaků je v záznamu. Je to velmi užitečné v řadě scénářů. Rychle se podívejte na následující příklad, abyste zjistili, jak to funguje.

$ echo "Náhodný textový řetězec ..." | awk 'délka tisku ($ 0);  '
$ awk 'délka tisku ($ 0);  '/ etc / passwd

Výše uvedený příkaz vytiskne celkový počet znaků přítomných v každém řádku vstupního řetězce nebo souboru.

25. Vytiskněte všechny řádky delší než zadaná délka


K výše uvedenému příkazu můžeme přidat některé podmíněné výrazy a nechat ho tisknout pouze ty řádky, které jsou větší než předdefinovaná délka. Je užitečné, když už máte představu o délce konkrétního záznamu.

$ echo "Náhodný textový řetězec ..." | awk 'length ($ 0)> 10'
$ awk 'délka ($ 0)> 5;  '/ etc / passwd

Můžete vložit více možností a / nebo argumentů pro vyladění příkazu na základě vašich požadavků.

26. Vytiskněte počet řádků, znaků a slov


Následující příkaz awk v systému Linux vytiskne počet řádků, znaků a slov v daném vstupu. Pro provádění této operace využívá proměnnou NR i základní aritmetiku.

$ echo "Toto je vstupní řádek ..." | awk 'w + = NF; c + = délka + 1 KONEC tisk NR, w, c '

Ukazuje, že ve vstupním řetězci je 1 řádek, 5 slov a přesně 24 znaků.

27. Vypočítejte frekvenci slov


Můžeme kombinovat asociativní pole a smyčku for v awk pro výpočet frekvence slova v dokumentu. Následující příkaz se může zdát trochu složitý, ale je poměrně jednoduchý, jakmile jasně pochopíte základní konstrukce.

$ awk 'BEGIN FS = "[^ a-zA-Z] +" pro (i = 1; i<=NF; i++) words[tolower($i)]++  END  for (i in words) print i, words[i] ' test.txt

Pokud máte potíže s úryvkem jedné linky, zkopírujte následující kód do nového souboru a spusťte jej pomocí zdroje.

$ cat> frekvence.awk ZAČÍNÁ FS = "[^ a-zA-Z] +" pro (i = 1; i<=NF; i++) words[tolower($i)]++  END  for (i in words) print i, words[i] 

Pak jej spusťte pomocí -F volba.

$ awk -f frekvence.awk test.txt

28. Přejmenujte soubory pomocí AWK


Příkaz awk lze použít k přejmenování všech souborů odpovídajících určitým kritériím. Následující příkaz ukazuje, jak použít awk k přejmenování všech .Soubory MP3 v adresáři do .soubory MP3.

$ touch a, b, c, d, e.MP3 $ ls *.MP3 | awk 'printf ("mv \"% s \ ""\""% s \ ""\ n"", $ 0, tolower ($ 0))' $ ls *.MP3 | awk 'printf (""mv \""% s \ ""\""% s \ ""\ n"", $ 0, tolower ($ 0))' | sh

Nejprve jsme vytvořili několik demo souborů pomocí .Přípona MP3. Druhý příkaz ukazuje uživateli, co se stane, když je přejmenování úspěšné. Nakonec poslední příkaz provede operaci přejmenování pomocí příkazu mv v Linuxu.

29. Vytiskněte druhou odmocninu čísla


AWK nabízí několik vestavěných funkcí pro manipulaci s číslicemi. Jedním z nich je funkce sqrt (). Jedná se o funkci podobnou C, která vrací druhou odmocninu daného čísla. Rychle se podívejte na další příklad, abyste zjistili, jak to obecně funguje.

$ awk 'BEGIN print sqrt (36)
        
Hry Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Emulátor Dolphin vám umožní hrát vybrané hry Gamecube a Wii na osobních počítačích se systémem Linux (PC). Jako volně dostupný herní emulátor s otevř...
Hry Jak používat GameConqueror Cheat Engine v Linuxu
Jak používat GameConqueror Cheat Engine v Linuxu
Tento článek popisuje průvodce používáním cheatovacího modulu GameConqueror v systému Linux. Mnoho uživatelů, kteří hrají hry v systému Windows, často...
Hry Nejlepší emulátory herních konzolí pro Linux
Nejlepší emulátory herních konzolí pro Linux
Tento článek uvádí seznam populárního softwaru pro emulaci herních konzolí, který je k dispozici pro Linux. Emulace je vrstva softwarové kompatibility...