A – Z komandos

40 Praktinė ir naudinga „awk“ komanda „Linux“ ir BSD

40 Praktinė ir naudinga „awk“ komanda „Linux“ ir BSD

AWK yra galinga duomenimis pagrįsta programavimo kalba, kurios pradžia siekia ankstyvąsias „Unix“ dienas. Iš pradžių ji buvo skirta „vieno linijinio“ programoms rašyti, tačiau nuo to laiko ji virto visaverte programavimo kalba. AWK vardą gauna iš autorių inicialų - Aho, Weinbergerio ir Kernighano. „Linux“ ir kitų „Unix“ sistemų „awk“ komanda iškviečia vertėją, kuris paleidžia AWK scenarijus. Naujausiose sistemose egzistuoja keli „awk“ variantai, tokie kaip gawk (GNU awk), mawk (minimalus awk) ir nawk (New awk), be kitų. Peržiūrėkite toliau pateiktus pavyzdžius, jei norite įvaldyti awk.

Suprasti AWK programas


Programos, parašytos awk, susideda iš taisyklių, kurios yra tiesiog šablonų ir veiksmų pora. Šablonai sugrupuoti breketuose , o veiksmo dalis suaktyvinama, kai „awk“ randa šabloną atitinkančius tekstus. Nors „awk“ buvo sukurtas vienkartiniams rašikliams rašyti, patyrę vartotojai gali lengvai juo rašyti sudėtingus scenarijus.

AWK programos yra labai naudingos apdorojant didelio masto failus. Jis identifikuoja teksto laukus naudodamas specialius simbolius ir atskyrėjus. Ji taip pat siūlo aukšto lygio programavimo konstrukcijas, tokias kaip masyvai ir kilpos. Taigi rašyti tvirtas programas naudojant paprastą awk yra labai įmanoma.

Praktiniai „Linux“ „awk“ komandos pavyzdžiai


Administratoriai paprastai naudoja „awk“ duomenims išgauti ir pateikti ataskaitas greta kitų manipuliacijų failais. Žemiau aptarėme „awk“ išsamiau. Atidžiai vykdykite komandas ir išbandykite jas savo terminale, kad suprastumėte.

1. Spausdinkite konkrečius laukus iš teksto išvesties


Plačiausiai naudojamos „Linux“ komandos pateikia savo išvestį naudodamos įvairius laukus. Paprastai tam, kad iš tokių duomenų išgautume konkretų lauką, naudojame komandą „Linux cut“. Tačiau žemiau pateikta komanda parodo, kaip tai padaryti naudojant komandą awk.

$ kas | awk 'print $ 1'

Ši komanda parodys tik pirmąjį lauką iš komandos, kuris išvedė. Taigi, jūs tiesiog gausite visų šiuo metu prisijungę vartotojų vardus. Čia, 1 USD reiškia pirmąjį lauką. Jums reikia naudoti N $ jei norite išgauti N-ąjį lauką.

2. Spausdinkite kelis laukus iš teksto išvesties


„AWK“ vertėjas leidžia atspausdinti bet kokį norimų laukų skaičių. Žemiau pateiktuose pavyzdžiuose parodyta, kaip išskleisti pirmuosius du laukus iš komandos who išvesties.

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

Taip pat galite valdyti išvesties laukų tvarką. Šiame pavyzdyje pirmiausia rodomas antrasis stulpelis, kurį sukūrė komanda, o tada pirmasis stulpelis antrame lauke.

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

Tiesiog palikite lauko parametrus (N $), kad būtų rodomi visi duomenys.

3. Naudokite BEGIN teiginius


BEGIN sakinys leidžia vartotojams išspausdinti žinomą informaciją išvestyje. Paprastai jis naudojamas formuojant išvesties duomenis, kuriuos generuoja awk. Šio teiginio sintaksė parodyta žemiau.

PRADŽIA Veiksmai VEIKSMAS

Visada suaktyvinami veiksmai, kurie sudaro skiltį BEGIN. Tada awk vienas po kito skaito likusias eilutes ir mato, ar reikia ką nors padaryti.

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

Pirmiau nurodyta komanda žymės du išvesties laukus, išgautus iš komandos who išvesties.

4. Naudokite END teiginius


Taip pat galite naudoti teiginį END, kad įsitikintumėte, jog tam tikri veiksmai visada atliekami jūsų operacijos pabaigoje. Tiesiog po pagrindinio veiksmų rinkinio įdėkite skiltį END.

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

Pirmiau nurodyta komanda pridės nurodytą eilutę išvesties pabaigoje.

5. Paieška naudojant šablonus


Didelė dalis „awk“ operacijų apima modelio derinimą ir regex. Kaip jau aptarėme, „awk“ ieško šablonų kiekvienoje įvesties eilutėje ir veiksmą atlieka tik tada, kai suveikia rungtis. Ankstesnės mūsų taisyklės buvo tik veiksmai. Žemiau mes iliustravome modelių derinimo pagrindus naudodami komandą „awk“ sistemoje „Linux“.

$ kas | awk '/ mary / print'

Ši komanda matys, ar vartotojas Mary šiuo metu yra prisijungęs, ar ne. Jei bus rasta atitiktis, ji išves visą eilutę.

6. Išgauti informaciją iš failų


Komanda awk labai gerai veikia su failais ir gali būti naudojama atliekant sudėtingas failų apdorojimo užduotis. Ši komanda parodo, kaip „awk“ tvarko failus.

$ awk '/ labas / print' / usr / share / dict / american-english

Ši komanda ieško šablono „labas“ Amerikos-anglų žodyno faile. Jis prieinamas daugumoje „Linux“ pagrindu veikiančių paskirstymų. Taigi šiame faile galite lengvai išbandyti awk programas.

7. Perskaitykite AWK scenarijų iš šaltinio failo


Nors rašyti vienos linijos programas yra naudinga, taip pat galite rašyti dideles programas visiškai naudodami „awk“. Jūs norite juos išsaugoti ir paleisti programą naudodami šaltinio failą.

$ awk -f scenarijaus failas $ awk - failo scenarijaus failas

The -f arba -failą parinktis leidžia mums nurodyti programos failą. Tačiau scenarijaus faile nereikia naudoti kabučių ("), nes" Linux "apvalkalas taip neišaiškins programos kodo.

8. Nustatykite įvesties lauko separatorių


Lauko skyriklis yra skiriklis, kuris padalija įvesties įrašą. Naudodami., Mes galime lengvai nurodyti laukų separatorius, kad jie būtų awk -F arba -lauko separatorius variantą. Peržiūrėkite toliau pateiktas komandas, kad pamatytumėte, kaip tai veikia.

$ echo "Tai-paprastas pavyzdys" | awk -F - 'print $ 1' $ echo "Tai-paprastas pavyzdys" | awk - field-separator - 'print $ 1'

Tai veikia taip pat, kai „Linux“ naudojate scenarijaus failus, o ne „one-liner awk“ komandą.

9. Spausdinti informaciją pagal būklę


„Linux cut“ komandą aptarėme ankstesniame vadove. Dabar mes parodysime, kaip išgauti informaciją naudojant „awk“ tik tada, kai atitinka tam tikrus kriterijus. Mes naudosime tą patį bandymo failą, kurį naudojome tame vadove. Taigi eikite ten ir padarykite testas.txt failą.

$ awk '$ 4> 50' testas.txt

Ši komanda atspausdins visas tautas iš bandymo.txt failas, kuriame gyvena daugiau nei 50 milijonų gyventojų.

10. Spausdinkite informaciją palygindami įprastus posakius


Ši komanda „awk“ patikrina, ar trečiosios bet kurios eilutės lauke yra raštas „Lira“, ir išspausdina visą eilutę, jei randama atitiktis. Mes vėl naudojame testą.txt failas, naudojamas „Linux cut“ komandai iliustruoti. Taigi prieš tęsdami įsitikinkite, kad turite šį failą.

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

Jei norite, galite pasirinkti atspausdinti konkrečią bet kurios atitikties dalį.

11. Suskaičiuokite bendrą įvestų eilučių skaičių


Komandoje awk yra daug specialios paskirties kintamųjų, kurie leidžia mums lengvai atlikti daug pažangių dalykų. Vienas iš tokių kintamųjų yra NR, kuriame yra dabartinis eilutės numeris.

$ awk 'END print NR' testas.txt

Ši komanda išves, kiek eilučių yra mūsų bandyme.txt failas. Pirmiausia jis kartojasi kiekvienoje eilutėje, o pasiekęs END, atspausdins NR vertę - kurioje šiuo atveju yra visas eilučių skaičius.

12. Nustatykite išvesties lauko separatorių


Anksčiau mes parodėme, kaip pasirinkti įvesties lauko skyriklius naudojant -F arba -lauko separatorius variantą. Komanda awk taip pat leidžia mums nurodyti išvesties lauko skyriklį. Žemiau pateiktas pavyzdys tai parodo naudodamas praktinį pavyzdį.

$ data | awk 'OFS = "-" spausdinti $ 2, $ 3, $ 6'

Ši komanda išspausdina dabartinę datą naudodama formatą dd-mm-yy. Paleiskite datos programą be awk, kad pamatytumėte, kaip atrodo numatytasis išvestis.

13. „If Construct“ naudojimas


Kaip ir kitos populiarios programavimo kalbos, „awk“ taip pat suteikia vartotojams „if-else“ konstrukcijas. „Ifk“ sakinio „awk“ sintaksė yra žemiau.

if (išraiška) first_action second_action

Atitinkami veiksmai atliekami tik tuo atveju, jei sąlyginė išraiška yra teisinga. Žemiau pateiktame pavyzdyje tai parodoma naudojant mūsų nuorodų failą testas.txt.

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

Jums nereikia griežtai išlaikyti įtraukos.

14. „If-Else Constructs“ naudojimas


Naudodamiesi žemiau esančia sintakse, galite susikurti naudingas „if-else“ kopėčias. Jie yra naudingi kuriant sudėtingus „awk“ scenarijus, kurie tvarko dinaminius duomenis.

jei (išraiška) pirmasis reiškia kitas antrasis
$ awk 'if ($ 4> 100) spausdinti; else print 'testas.txt

Pirmiau nurodyta komanda atspausdins visą nuorodos failą, nes ketvirtasis laukas kiekvienoje eilutėje yra ne didesnis kaip 100.

15. Nustatykite lauko plotį


Kartais įvesties duomenys yra gana netvarkingi, todėl vartotojams gali būti sunku juos vizualizuoti savo ataskaitose. Laimei, „awk“ pateikia galingą integruotą kintamąjį, vadinamą FIELDWIDTHS, kuris leidžia mums apibrėžti tarpais atskirtą pločių sąrašą.

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

Tai labai naudinga analizuojant išsibarsčiusius duomenis, nes išvesties lauko plotį galime valdyti tiksliai taip, kaip norime.

16. Nustatykite įrašų skyriklį


RS arba įrašų separatorius yra dar vienas įmontuotas kintamasis, kuris leidžia mums nurodyti, kaip įrašai yra atskiriami. Pirmiausia sukurkime failą, kuris parodys šio awk kintamojo veikimą.

$ katė nauja.txt Melinda James 23 Naujasis Hampšyras (222) 466-1234 Daniel James 99 Phonenix Road (322) 677-3412
$ awk 'BEGIN FS = "\ n"; print $ 1, $ 3' new.txt

Ši komanda analizuos dokumentą ir išpjaus dviejų asmenų vardus bei pavardes ir adresus.

17. Spausdinti aplinkos kintamuosius


„Linux“ komanda awk leidžia mums lengvai spausdinti aplinkos kintamuosius naudojant kintamąjį ENVIRON. Žemiau pateikta komanda parodo, kaip tai naudoti atspausdinant PATH kintamojo turinį.

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

Galite atsispausdinti bet kokio aplinkos kintamojo turinį pakeisdami ENVIRON kintamojo argumentą. Žemiau pateikta komanda išspausdina aplinkos kintamojo HOME vertę.

$ awk 'BEGIN spausdinti ENVIRON ["HOME"]'

18. Praleiskite kai kuriuos laukus iš „Output“


Komanda awk leidžia mums praleisti konkrečias eilutes iš mūsų išvesties. Ši komanda tai parodys naudodama mūsų nuorodų failą testas.txt.

$ awk -F ":" '$ 2 = ""; spausdinti 'testas.txt

Ši komanda praleis antrąjį failo stulpelį, kuriame yra kiekvienos šalies sostinės pavadinimas. Taip pat galite praleisti daugiau nei vieną lauką, kaip parodyta kitoje komandoje.

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

19. Pašalinkite tuščias eilutes


Kartais duomenyse gali būti per daug tuščių eilučių. Galite gana lengvai pašalinti tuščias eilutes naudodami komandą awk. Peržiūrėkite kitą komandą, kad sužinotumėte, kaip tai veikia praktiškai.

$ awk '/ ^ [\ t] * $ / kitas print' naujas.txt

Iš failo pašalinome visas tuščias eilutes.txt naudojant paprastą taisyklingą išraišką ir įtaisytą „awk“, vadinamą toliau.

20. Pašalinkite galines tarpus


Daugelio „Linux“ komandų išvestyje yra tarpų. Mes galime naudoti „Linux“ komandą „awk“, kad pašalintume tokius tarpus, kaip tarpai ir skirtukai. Peržiūrėkite toliau pateiktą komandą, kad sužinotumėte, kaip išspręsti tokias problemas naudojant „awk“.

$ awk 'sub (/ [\ \ t] * $ /, ""); print' naujas.txt testas.txt

Įtraukite keletą galinių tarpų į mūsų nuorodų failus ir patikrinkite, ar „awk“ juos sėkmingai pašalino, ar ne. Tai sėkmingai padarė mano mašina.

21. Patikrinkite laukų skaičių kiekvienoje eilutėje


Mes galime lengvai patikrinti, kiek laukų yra vienoje linijoje, naudodami paprastą „awk“ vieno įdėklo juostą. Yra daugybė būdų, kaip tai padaryti, tačiau šiai užduočiai atlikti naudosime kai kuriuos „awk“ įmontuotus kintamuosius. NR kintamasis nurodo eilutės numerį, o NF kintamasis pateikia laukų skaičių.

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

Dabar galime patvirtinti, kiek laukų yra mūsų eilutėje testas.txt dokumentas. Kadangi kiekvienoje šio failo eilutėje yra 5 laukai, mes esame tikri, kad komanda veikia taip, kaip tikėtasi.

22. Patvirtinkite dabartinį failo pavadinimą


Awk kintamasis FILENAME naudojamas tikrinti dabartinį įvesties failo pavadinimą. Mes demonstruojame, kaip tai veikia, naudodami paprastą pavyzdį. Tačiau tai gali būti naudinga tais atvejais, kai failo pavadinimas nėra aiškiai žinomas arba yra daugiau nei vienas įvesties failas.

$ awk 'print FILENAME' testas.txt $ awk 'print FILENAME' testas.txt naujas.txt

Aukščiau nurodytos komandos išspausdina failo pavadinimą, kurį veikia awk kiekvieną kartą, kai jis apdoroja naują įvesties failų eilutę.

23. Patikrinkite apdorotų įrašų skaičių


Šis pavyzdys parodys, kaip mes galime patikrinti komandų awk apdorotų įrašų skaičių. Kadangi daugybė „Linux“ sistemos administratorių ataskaitoms kurti naudoja „awk“, jiems tai labai naudinga.

$ awk 'print "Apdorojamas įrašas -", ​​NR; END print "\ nVisi įrašai apdoroti:", NR;' testas.txt

Aš dažnai naudoju šį „awk“ fragmentą, kad turėčiau aiškią savo veiksmų apžvalgą. Galite lengvai jį pritaikyti, kad pritaikytumėte naujų idėjų ar veiksmų.

24. Atspausdinkite bendrą įrašo simbolių skaičių


„Awk“ kalba pateikia patogią funkciją, vadinamą length (), kuri nurodo, kiek simbolių yra įraše. Tai labai naudinga daugelyje scenarijų. Greitai pažvelkite į šį pavyzdį, kad pamatytumėte, kaip tai veikia.

$ echo "Atsitiktinė teksto eilutė ..." | awk 'spausdinimo ilgis (0 USD); 
$ awk 'spausdinimo ilgis ($ 0);  '/ etc / passwd

Pirmiau nurodyta komanda atspausdins bendrą kiekvienoje įvesties eilutės ar failo eilutėje esančių simbolių skaičių.

25. Spausdinkite visas ilgesnes už nurodytą ilgį


Kai kuriuos sąlyginius dalykus prie pirmiau nurodytos komandos galime pridėti ir priversti spausdinti tik tas eilutes, kurios yra ilgesnės nei iš anksto nustatytos. Tai naudinga, kai jau turite idėją apie konkretaus įrašo ilgį.

$ echo "Atsitiktinė teksto eilutė ..." | awk 'ilgis (0 USD)> 10'
$ awk 'ilgis ($ 0)> 5;  '/ etc / passwd

Galite įvesti daugiau parinkčių ir (arba) argumentų, kad pritaikytumėte komandą pagal savo reikalavimus.

26. Spausdinkite eilučių, simbolių ir žodžių skaičių


Ši „Linux“ komanda „awk“ išspausdina eilučių, simbolių ir žodžių skaičių tam tikrame įvestyje. Šiai operacijai atlikti naudojamas NR kintamasis ir tam tikra pagrindinė aritmetika.

$ echo "Tai įvesties eilutė ..." | awk 'w + = NF; c + = ilgis + 1 PABAIGA spausdinti NR, w, c '

Tai rodo, kad įvesties eilutėje yra 1 eilutė, 5 žodžiai ir tiksliai 24 simboliai.

27. Apskaičiuokite žodžių dažnumą


Norėdami apskaičiuoti dokumento žodžio dažnį, galime sujungti asociatyvius masyvus ir for loop in awk. Ši komanda gali atrodyti šiek tiek sudėtinga, tačiau ji yra gana paprasta, kai jūs aiškiai suprantate pagrindines konstrukcijas.

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

Jei kyla problemų dėl vieno linijinio fragmento, nukopijuokite šį kodą į naują failą ir paleiskite jį naudodami šaltinį.

$ cat> dažnis.awk PRADŽIA FS = "[^ a-zA-Z] +" for (i = 1; i<=NF; i++) words[tolower($i)]++  END  for (i in words) print i, words[i] 

Tada paleiskite jį naudodami -f variantą.

$ awk -f dažnis.awk testas.txt

28. Pervardykite failus naudodami AWK


Komanda awk gali būti naudojama norint pervardyti visus failus, atitinkančius tam tikrus kriterijus. Ši komanda parodo, kaip naudoti awk visiems pervadinant .MP3 failus kataloge į .mp3 failai.

$ 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

Pirmiausia mes sukūrėme keletą demonstracinių failų su .MP3 plėtinys. Antroji komanda parodo vartotojui, kas nutinka, kai pervadinti pavyksta. Galiausiai paskutinė komanda pervadina operaciją naudodama „mv“ komandą „Linux“.

29. Atspausdinkite skaičiaus kvadratinę šaknį


AWK siūlo kelias įmontuotas funkcijas, skirtas manipuliuoti skaitmenimis. Viena iš jų yra sqrt () funkcija. Tai yra į C panaši funkcija, kuri grąžina nurodyto skaičiaus kvadratinę šaknį. Greitai pažvelkite į kitą pavyzdį, kad pamatytumėte, kaip tai veikia apskritai.

$ awk 'BEGIN print sqrt (36)
        
Kaip atsisiųsti ir paleisti „Sid Meier Civilization VI“ sistemoje „Linux“
Įvadas į žaidimą „Civilization 6“ yra šiuolaikinė klasikinės koncepcijos, pristatytos „Age of Empires“ žaidimų serijoje, koncepcija. Idėja buvo gana p...
Kaip įdiegti ir žaisti „Doom“ sistemoje „Linux“
Įvadas į Doom „Doom“ serija atsirado 90-aisiais, išleidus originalų „Doom“. Tai buvo tiesioginis hitas, o nuo to laiko žaidimų serija gavo daugybę apd...
„Vulkan“, skirta „Linux“ vartotojams
Kiekvienos naujos kartos grafikos plokštės matome, kaip žaidimų kūrėjai peržengia grafinės ištikimybės ribas ir artėja prie fotorealizmo. Nepaisant vi...