Príkazy A-Z

40 Praktické a užitočné ovládanie awk v systémoch Linux a BSD

40 Praktické a užitočné ovládanie awk v systémoch Linux a BSD

AWK je výkonný programovací jazyk založený na dátach, ktorého počiatky siahajú do začiatkov Unixu. Pôvodne bol vyvinutý na písanie „jednorázových“ programov, ale odvtedy sa vyvinul do plnohodnotného programovacieho jazyka. Názov AWK dostal podľa iniciálok svojich autorov - Aho, Weinberger a Kernighan. Príkaz awk v systéme Linux a ďalších systémoch Unix vyvolá tlmočníka, ktorý spúšťa skripty AWK. V nedávnych systémoch existuje niekoľko implementácií awk, napríklad gawk (GNU awk), mawk (Minimal awk) a nawk (New awk). Ak si chcete osvojiť awk, pozrite si nižšie uvedené príklady.

Pochopenie programov AWK


Programy písané v awk pozostávajú z pravidiel, ktoré sú jednoducho dvojicou vzorov a akcií. Vzory sú zoskupené v zloženej zátvorke a akčná časť sa spustí, keď awk nájde texty, ktoré sa zhodujú so vzorom. Aj keď bol awk vyvinutý na písanie jednorázových riadkov, skúsení používatelia s ním môžu ľahko písať zložité skripty.

Programy AWK sú veľmi užitočné na rozsiahle spracovanie súborov. Identifikuje textové polia pomocou špeciálnych znakov a oddeľovačov. Ponúka tiež programovacie konštrukcie na vysokej úrovni, ako sú polia a slučky. Takže písanie robustných programov pomocou obyčajného awk je veľmi možné.

Praktické príklady príkazu awk v systéme Linux


Správcovia zvyčajne používajú awk na extrakciu údajov a vytváranie prehľadov spolu s inými typmi manipulácie so súbormi. Ďalej sme podrobnejšie diskutovali o awk. Postupujte podľa pokynov starostlivo a vyskúšajte ich vo svojom termináli, aby ste úplne porozumeli.

1. Tlač konkrétnych polí z textového výstupu


Najbežnejšie používané príkazy systému Linux zobrazujú svoj výstup pomocou rôznych polí. Za normálnych okolností používame príkaz Linux cut na extrahovanie konkrétneho poľa z týchto údajov. Nasledujúci príkaz vám však ukáže, ako to urobiť pomocou príkazu awk.

$ kto | awk 'print $ 1'

Tento príkaz zobrazí iba prvé pole z výstupu príkazu who. Jednoducho teda získate používateľské mená všetkých aktuálne prihlásených používateľov. Tu, 1 $ predstavuje prvé pole. Musíte použiť $ N ak chcete extrahovať N-té pole.

2. Tlač viacerých polí z textového výstupu


Tlmočník awk nám umožňuje tlačiť ľubovoľný počet polí, ktoré požadujeme. Nasledujúce príklady nám ukazujú, ako extrahovať prvé dve polia z výstupu príkazu who.

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

Môžete tiež ovládať poradie výstupných polí. Nasledujúci príklad najskôr zobrazuje druhý stĺpec produkovaný príkazom who a potom prvý stĺpec v druhom poli.

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

Jednoducho vynechajte parametre poľa ($ N) na zobrazenie všetkých údajov.

3. Použite ZAČÍNAME príkazy


Príkaz BEGIN umožňuje používateľom vytlačiť na výstup niektoré známe informácie. Spravidla sa používa na formátovanie výstupných údajov generovaných awk. Syntax tohto vyhlásenia je uvedená nižšie.

ZAČÍNAME Actions ACTION

Akcie, ktoré tvoria sekciu ZAČIATOK, sa vždy spustia. Potom awk prečíta zostávajúce riadky jeden po druhom a zistí, či je potrebné niečo urobiť.

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

Vyššie uvedený príkaz označí dve výstupné polia extrahované z výstupu príkazu who.

4. Používajte príkaz KONIEC


Môžete tiež použiť príkaz KONIEC, aby ste sa ubezpečili, že určité akcie sa vykonajú vždy na konci vašej operácie. Jednoducho vložte sekciu KONIEC po hlavnej skupine akcií.

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

Vyššie uvedený príkaz pripojí daný reťazec na koniec výstupu.

5. Hľadajte pomocou vzorov


Veľká časť fungovania awku zahŕňa zhodu vzorov a regulárny výraz. Ako sme už diskutovali, awk vyhľadáva vzory v každom vstupnom riadku a akciu vykoná iba pri spustení zhody. Naše predchádzajúce pravidlá pozostávali iba z akcií. Ďalej uvádzame základné informácie o porovnávaní vzorov pomocou príkazu awk v systéme Linux.

$ kto | awk '/ mary / print'

Tento príkaz uvidí, či je používateľ mary momentálne prihlásený alebo nie. Ak sa nájde nejaká zhoda, vygeneruje sa celý riadok.

6. Extrahujte informácie zo súborov


Príkaz awk pracuje veľmi dobre so súbormi a dá sa použiť na zložité úlohy pri spracovaní súborov. Nasledujúci príkaz ilustruje, ako awk narába so súbormi.

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

Tento príkaz vyhľadá vzor „ahoj“ v americko-anglickom slovníku. Je k dispozícii na väčšine distribúcií založených na systéme Linux. Preto môžete v tomto súbore ľahko vyskúšať programy awk.

7. Prečítajte si skript AWK zo zdrojového súboru


Aj keď je písanie jednorázových programov užitočné, môžete písať veľké programy aj pomocou awk. Budete ich chcieť uložiť a spustiť program pomocou zdrojového súboru.

$ awk -f skriptový súbor $ awk --file skriptový súbor

The -f alebo -spis voľba nám umožňuje určiť programový súbor. Vo vnútri súboru skriptu však nemusíte používať úvodzovky ("), pretože linuxový shell nebude takto programový kód interpretovať.

8. Nastavte oddeľovač vstupného poľa


Oddeľovač polí je oddeľovač, ktorý rozdeľuje vstupný záznam. Môžeme ľahko určiť oddeľovače polí pre awk pomocou -F alebo -oddeľovač polí možnosť. Ako to funguje, pozrite sa na nižšie uvedené príkazy.

$ echo "Toto je jednoduchý príklad" | awk -F - 'print $ 1' $ echo "Toto je jednoduchý príklad" | awk --field-separator - 'print $ 1'

Rovnako to funguje aj pri použití súborov skriptov a nie jednorázového príkazu awk v systéme Linux.

9. Informácie o tlači sú založené na stave


Príkazu Linux cut sme sa venovali v minulom sprievodcovi. Teraz vám ukážeme, ako extrahovať informácie pomocou awk, iba ak sú splnené určité kritériá. Budeme používať rovnaký testovací súbor, aký sme použili v tejto príručke. Takže choďte tam a urobte si kópiu súboru test.TXT spis.

$ awk '$ 4> 50' test.TXT

Tento príkaz vytlačí z testu všetky národy.súbor txt, ktorý má viac ako 50 miliónov obyvateľov.

10. Tlačte informácie porovnaním regulárnych výrazov


Nasledujúci príkaz awk skontroluje, či tretie pole ľubovoľného riadku obsahuje vzor „Lira“, a vytlačí celý riadok, ak sa nájde zhoda. Znovu používame test.Súbor txt používaný na ilustráciu príkazu Linux cut. Pred pokračovaním sa uistite, že ste tento súbor dostali.

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

Ak chcete, môžete si zvoliť tlač iba konkrétnej časti ľubovoľnej zhody.

11. Spočítajte celkový počet riadkov na vstupe


Príkaz awk má veľa premenných na špeciálne účely, ktoré nám umožňujú robiť veľa pokročilých vecí ľahko. Jednou z takýchto premenných je NR, ktorá obsahuje číslo aktuálneho riadku.

$ awk 'END print NR' test.TXT

Tento príkaz vygeneruje, koľko riadkov je v našom teste.súbor txt. Najskôr iteruje cez každý riadok a po dosiahnutí END vytlačí hodnotu NR - ktorá v tomto prípade obsahuje celkový počet riadkov.

12. Nastavte oddeľovač výstupného poľa


Predtým sme si ukázali, ako vyberať oddeľovače vstupných polí pomocou znaku -F alebo -oddeľovač polí možnosť. Príkaz awk nám tiež umožňuje určiť oddeľovač výstupného poľa. Nasledujúci príklad to demonštruje na praktickom príklade.

$ dátum | awk 'OFS = "-" print 2 $, 3 $, 6 $'

Tento príkaz vytlačí aktuálny dátum vo formáte dd-mm-rr. Spustite program s dátumom bez awk a uvidíte, ako vyzerá predvolený výstup.

13. Používanie konštrukcie If


Rovnako ako iné populárne programovacie jazyky, awk tiež poskytuje používateľom konštrukcie if-else. Príkaz if v awk má nasledujúcu syntax.

if (výraz) first_action second_action

Zodpovedajúce akcie sa vykonajú, iba ak je podmienený výraz pravdivý. Nasledujúci príklad to demonštruje pomocou nášho referenčného súboru test.TXT.

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

Odsadenie nemusíte striktne udržiavať.

14. Používanie konštruktov If-Else


Pomocou nasledujúcej syntaxe môžete zostaviť užitočné rebríky if-else. Sú užitočné pri navrhovaní zložitých skriptov awk, ktoré sa zaoberajú dynamickými údajmi.

if (výraz) prvá_akcia iná druhá_akcia
$ awk 'if ($ 4> 100) tlač; else print 'test.TXT

Vyššie uvedený príkaz vytlačí celý referenčný súbor, pretože štvrté pole nie je väčšie ako 100 pre každý riadok.

15. Nastavte šírku poľa


Niekedy sú vstupné údaje dosť chaotické a pre používateľov môže byť ťažké vizualizovať ich vo svojich prehľadoch. Našťastie awk poskytuje výkonnú zabudovanú premennú s názvom FIELDWIDTHS, ktorá nám umožňuje definovať zoznam šírok oddelených bielymi znakmi.

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

Je to veľmi užitočné pri analýze rozptýlených údajov, pretože šírku výstupného poľa môžeme ovládať presne tak, ako chceme.

16. Nastavte oddeľovač záznamu


RS alebo separátor záznamov je ďalšia zabudovaná premenná, ktorá nám umožňuje určiť, ako sa majú záznamy separovať. Najprv vytvorme súbor, ktorý demonštruje fungovanie tejto premennej awk.

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

Tento príkaz analyzuje dokument a vyplivne meno a adresu týchto dvoch osôb.

17. Premenné prostredia tlače


Príkaz awk v systéme Linux nám umožňuje ľahko tlačiť premenné prostredia pomocou premennej ENVIRON. Nasledujúci príkaz ukazuje, ako to použiť na vytlačenie obsahu premennej PATH.

$ awk 'ZAČÍNAME print ENVIRON ["PATH"]' '

Obsah akýchkoľvek premenných prostredia môžete vytlačiť nahradením argumentu premennej ENVIRON. Nasledujúci príkaz vytlačí hodnotu premennej prostredia HOME.

$ awk 'ZAČÍNAME tlač ENVIRON ["DOMOV"]'

18. Vynechajte niektoré polia z výstupu


Príkaz awk nám umožňuje vynechať z nášho výstupu konkrétne riadky. Nasledujúci príkaz to demonštruje pomocou nášho referenčného súboru test.TXT.

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

Tento príkaz vynechá druhý stĺpec nášho súboru, ktorý obsahuje názov hlavného mesta pre každú krajinu. Môžete tiež vynechať viac ako jedno pole, ako je uvedené v nasledujúcom príkaze.

$ awk -F ":" '$ 2 = ""; $ 3 = ""; tlač' test.TXT

19. Odstráňte prázdne riadky


Údaje môžu niekedy obsahovať príliš veľa prázdnych riadkov. Príkaz awk môžete použiť na ľahké odstránenie prázdnych riadkov. Pozrite sa na ďalší príkaz a uvidíte, ako to funguje v praxi.

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

Zo súboru sme odstránili všetky prázdne riadky nové.txt pomocou jednoduchého regulárneho výrazu a zabudovaného awk s názvom next.

20. Odstráňte koncové medzery


Výstup mnohých príkazov systému Linux obsahuje koncové medzery. Príkazom awk v systéme Linux môžeme odstrániť také biele medzery, ako sú medzery a karty. Ak sa chcete dozvedieť, ako vyriešiť tieto problémy pomocou awk, pozrite si nasledujúci príkaz.

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

Pridajte nejaké medzery za sebou do našich referenčných súborov a overte, či ich awk úspešne odstránil alebo nie. V mojom prístroji sa to podarilo úspešne.

21. Skontrolujte počet polí v každom riadku


Pomocou jednoduchého awk jednoradového riadku môžeme ľahko skontrolovať, koľko polí je v rade. Existuje mnoho spôsobov, ako to urobiť, ale pre túto úlohu použijeme niektoré zo zabudovaných premenných awk. Premenná NR nám dáva číslo riadku a premenná NF počet polí.

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

Teraz môžeme potvrdiť, koľko polí je na riadok v našej test.TXT dokument. Pretože každý riadok tohto súboru obsahuje 5 polí, sme si istí, že príkaz pracuje podľa očakávania.

22. Overte aktuálny názov súboru


Premenná awk FILENAME sa používa na overenie aktuálneho vstupného súboru. Demonštrujeme, ako to funguje, na jednoduchom príklade. Môže to však byť užitočné v situáciách, keď názov súboru nie je explicitne známy alebo existuje viac ako jeden vstupný súbor.

$ awk 'print FILENAME' test.txt $ awk 'print FILENAME' test.txt nový.TXT

Vyššie uvedené príkazy vytlačia názov súboru awk, na ktorom pracuje zakaždým, keď spracuje nový riadok vstupných súborov.

23. Overte počet spracovaných záznamov


Nasledujúci príklad predstaví, ako môžeme overiť počet záznamov spracovaných príkazom awk. Pretože veľký počet správcov systému Linux používa awk na generovanie správ, je to pre nich veľmi užitočné.

$ awk 'print "Processing Record -", NR; END print "\ nCelkový počet spracovaných záznamov:", NR;' test.TXT

Tento úryvok awk často používam na to, aby som mal jasný prehľad o svojich činoch. Môžete ho ľahko doladiť tak, aby vyhovoval novým nápadom alebo akciám.

24. Vytlačte celkový počet znakov v zázname


Jazyk awk poskytuje užitočnú funkciu zvanú length (), ktorá nám hovorí, koľko znakov je v zázname. Je to veľmi užitočné v mnohých scenároch. V krátkosti si pozrite nasledujúci príklad, aby ste zistili, ako to funguje.

$ echo "Náhodný textový reťazec ..." | awk 'dĺžka tlače ($ 0);  '
$ awk 'dĺžka tlače ($ 0);  '/ etc / passwd

Vyššie uvedený príkaz vytlačí celkový počet znakov v každom riadku vstupného reťazca alebo súboru.

25. Vytlačte všetky riadky dlhšie ako je zadaná dĺžka


K vyššie uvedenému príkazu môžeme pridať nejaké podmienené a nechať ho tlačiť iba tie riadky, ktoré sú väčšie ako preddefinovaná dĺžka. Je to užitočné, keď už máte predstavu o dĺžke konkrétneho záznamu.

$ echo "Náhodný textový reťazec ..." | dĺžka awk '($ 0)> 10'
$ awk 'dĺžka ($ 0)> 5;  '/ etc / passwd

Môžete nahodiť viac možností a argumentov na doladenie príkazu na základe vašich požiadaviek.

26. Vytlačte si počet riadkov, znakov a slov


Nasledujúci príkaz awk v systéme Linux vytlačí počet riadkov, znakov a slov v danom vstupe. Využíva premennú NR a niektoré základné aritmetické parametre na vykonanie tejto operácie.

$ echo "Toto je vstupný riadok ..." | awk 'w + = NF; c + = dĺžka + 1 KONIEC tlač NR, š, c '

Ukazuje, že vo vstupnom reťazci je 1 riadok, 5 slov a presne 24 znakov.

27. Vypočítajte frekvenciu slov


Na výpočet frekvencie slov v dokumente môžeme kombinovať asociatívne polia a cyklus for v awk. Nasledujúci príkaz sa môže zdať trochu zložitý, ale je pomerne jednoduchý, ak jasne pochopíte základné konštrukty.

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

Ak máte ťažkosti s útržkom jedného riadku, skopírujte nasledujúci kód do nového súboru a spustite ho pomocou zdroja.

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

Potom ho spustite pomocou -f možnosť.

$ awk -f frekvencia.awk test.TXT

28. Premenujte súbory pomocou AWK


Príkaz awk možno použiť na premenovanie všetkých súborov, ktoré zodpovedajú určitým kritériám. Nasledujúci príkaz ilustruje, ako použiť awk na premenovanie všetkých .MP3 súbory v adresári do .súbory 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))' | š

Najprv sme vytvorili niekoľko demo súborov pomocou .Rozšírenie MP3. Druhý príkaz ukazuje používateľovi, čo sa stane, keď je premenovanie úspešné. Nakoniec posledný príkaz vykoná operáciu premenovania pomocou príkazu mv v systéme Linux.

29. Vytlačte druhú odmocninu čísla


AWK ponúka niekoľko zabudovaných funkcií na manipuláciu s číslicami. Jedným z nich je funkcia sqrt (). Je to funkcia podobná C, ktorá vráti druhú odmocninu daného čísla. V krátkosti si pozrite nasledujúci príklad a zistite, ako to funguje vo všeobecnosti.

$ awk 'ZAČIATOK print sqrt (36)
        
Hry Zadarmo a open source herné motory pre vývoj hier pre Linux
Zadarmo a open source herné motory pre vývoj hier pre Linux
Tento článok sa bude zaoberať zoznamom bezplatných a otvorených herných nástrojov, ktoré možno použiť na vývoj 2D a 3D hier v systéme Linux. Existuje ...
Hry Výukový program Shadow of the Tomb Raider pre Linux
Výukový program Shadow of the Tomb Raider pre Linux
Shadow of the Tomb Raider je dvanásty prírastok do série Tomb Raider - franšíza akčných adventúr vytvorená Eidosom Montrealom. Túto hru prijali kritic...
Hry Ako zvýšiť rýchlosť FPS v systéme Linux?
Ako zvýšiť rýchlosť FPS v systéme Linux?
FPS znamená Počet snímok za sekundu. Úlohou FPS je merať snímkovú frekvenciu pri prehrávaní videa alebo herných výkonoch. Jednoducho povedané, počet n...