Kako koristiti naredbu awk na Linuxu

Fatmawati Achmad Zaenuri/Shutterstock



Na Linuxu, |_+_| je dinamo za manipulaciju tekstom naredbenog retka, kao i moćan skriptni jezik. Evo uvoda u neke od njegovih najboljih značajki.

POVEZANO: 10 osnovnih Linux naredbi za početnike





Kako je awk dobio ime

The |_+_| naredba je dobila ime pomoću inicijala troje ljudi koji su napisali originalnu verziju 1977.: Alfred Aho , Peter Weinberger , i Brian Kernighan . Ova tri čovjeka bila su iz legendarnih AT&T Bell Laboratories Unix panteon. Uz doprinose mnogih drugih od tada, |_+_| nastavio se razvijati.

To je potpuni skriptni jezik, kao i kompletan alat za manipulaciju tekstom za naredbeni redak. Ako vam ovaj članak probudi apetit, možete provjerite svaki detalj o |_+_| i njegovu funkcionalnost.



Pravila, obrasci i radnje

|_+_| radi na programima koji sadrže pravila koja se sastoje od obrazaca i radnji. Radnja se izvršava na tekstu koji odgovara uzorku. Uzorci su zatvoreni u vitičaste zagrade (|_+_|). Zajedno, obrazac i akcija čine pravilo. Cijeli |_+_| program je stavljen u jednostruke navodnike (|_+_|).

Pogledajmo najjednostavniji tip |_+_| program. Nema uzorka, tako da odgovara svakom retku teksta unesenog u njega. To znači da se radnja izvršava na svakom retku. Dobro koristiti ga na izlazu iz |_+_| naredba.

Evo standardnog izlaza iz |_+_|:



awk

Oglas

Možda nam ne trebaju sve te informacije, nego samo želimo vidjeti imena na računima. Možemo usmjeriti izlaz iz |_+_| u |_+_|, a zatim reci |_+_| za ispis samo prvog polja.

Prema zadanim postavkama, |_+_| smatra polje nizom znakova okruženih razmakom, početkom retka ili krajem retka. Polja su označena znakom dolara (|_+_|) i brojem. Dakle, |_+_| predstavlja prvo polje, koje ćemo koristiti s |_+_| radnja za ispis prvog polja.

Upisujemo sljedeće:

awk

|_+_| ispisuje prvo polje i odbacuje ostatak retka.

Možemo ispisati onoliko polja koliko želimo. Ako kao razdjelnik dodamo zarez, |_+_| ispisuje razmak između svakog polja.

Upisujemo sljedeće kako bismo također ispisali vrijeme kada se osoba prijavila (četvrto polje):

awk

Postoji nekoliko posebnih identifikatora polja. Oni predstavljaju cijeli redak teksta i posljednje polje u retku teksta:

    0 dolara: Predstavlja cijeli redak teksta. 1 dolar: Predstavlja prvo polje. 2 dolara: Predstavlja drugo polje. 7 dolara: Predstavlja sedmo polje. 45 dolara: Predstavlja 45. polje. $NF: Označava broj polja i predstavlja posljednje polje.
Oglas

Upisat ćemo sljedeće kako bismo prikazali malu tekstualnu datoteku koja sadrži kratki citat koji se pripisuje Dennis Ritchie :

awk

Želimo |_+_| za ispis prvog, drugog i posljednjeg polja citata. Imajte na umu da, iako je omotan u prozoru terminala, to je samo jedan redak teksta.

Upisujemo sljedeću naredbu:

awk

Ne poznajemo tu jednostavnost. je 18. polje u retku teksta i nije nas briga. Ono što znamo je da je to zadnje polje i možemo koristiti |_+_| da dobije svoju vrijednost. Razdoblje se samo smatra još jednim likom u tijelu polja.

Dodavanje separatora izlaznih polja

Također možete reći |_+_| za ispis određenog znaka između polja umjesto zadanog znaka razmaka. Zadani izlaz iz |_+_| naredba je malo neobična jer je vrijeme plonkirano usred toga. Međutim, možemo upisati sljedeće i koristiti |_+_| da izdvojimo polja koja želimo:

{} awk

Koristit ćemo |_+_| (razdjelnik izlaznog polja) varijabla za stavljanje separatora između mjeseca, dana i godine. Imajte na umu da u nastavku naredbu stavljamo u jednostruke navodnike (|_+_|), a ne vitičaste zagrade (|_+_|):

' awk

Pravila POČETAK i KRAJ

A |_+_| pravilo se izvršava jednom prije početka obrade teksta. Zapravo, izvršava se prije |_+_| čak i čita bilo koji tekst. An |_+_| pravilo se izvršava nakon što se sva obrada završi. Možete imati više |_+_| i |_+_| pravila, i izvršavat će se po redu.

Oglas

Za naš primjer |_+_| pravilo, ispisat ćemo cijeli citat iz |_+_| datoteku koju smo prethodno koristili s naslovom iznad.

Da bismo to učinili, upisujemo ovu naredbu:

who

Obratite pažnju na |_+_| pravilo ima vlastiti skup akcija zatvorenih unutar vlastitog skupa vitičastih zagrada (|_+_|).

Ovu istu tehniku ​​možemo koristiti s naredbom koju smo prethodno koristili za usmjeravanje izlaza iz |_+_| u |_+_|. Da bismo to učinili, upisujemo sljedeće:

who

Razdjelnici ulaznih polja

Ako želite |_+_| da biste radili s tekstom koji ne koristi razmak za odvajanje polja, morate mu reći koji znak tekst koristi kao razdjelnik polja. Na primjer, |_+_| datoteka koristi dvotočku (|_+_|) za odvajanje polja.

Koristit ćemo tu datoteku i |_+_| (string za razdvajanje) opcija za reći |_+_| koristiti dvotočku (|_+_|) kao razdjelnik. Upisujemo sljedeće da kažemo |_+_| za ispis naziva korisničkog računa i početne mape:

who

Izlaz sadrži naziv korisničkog računa (ili naziv aplikacije ili demona) i početnu mapu (ili lokaciju aplikacije).

Dodavanje uzoraka

Ako su sve što nas zanima su obični korisnički računi, možemo uključiti uzorak u našu radnju ispisa kako bismo filtrirali sve ostale unose. Jer ID korisnika brojevi su jednaki ili veći od 1000, možemo temeljiti naš filter na toj informaciji.

Oglas

Upisujemo sljedeće da izvršimo našu radnju ispisa samo kada treće polje (|_+_|) sadrži vrijednost od 1000 ili veću:

awk

Uzorak bi trebao neposredno prethoditi radnji s kojom je povezan.

Možemo koristiti |_+_| pravilo za davanje naslova za naše malo izvješće. Upisujemo sljedeće, koristeći (|_+_|) oznaku za umetanje znaka za novi red u naslovni niz:

awk

Uzorci su punopravni regularni izrazi , a oni su jedna od slava |_+_|.

Recimo da želimo vidjeti univerzalno jedinstvene identifikatore (UUID-ove) montiranih datotečnih sustava. Ako pretražujemo kroz |_+_| datoteku za pojavljivanja niza UUID, trebao bi nam vratiti tu informaciju.

Koristimo obrazac pretraživanja /UUID/ u našoj naredbi:

awk

Oglas

Pronalazi sve pojave UUID-a i ispisuje te retke. Zapravo bismo dobili isti rezultat bez |_+_| radnja jer zadana radnja ispisuje cijeli redak teksta. Međutim, radi jasnoće, često je korisno biti eksplicitan. Kad pregledate skriptu ili svoju povijesnu datoteku, bit će vam drago što ste sebi ostavili tragove.

Prvi pronađeni redak bio je redak komentara, i iako je niz UUID u sredini, |_+_| ipak našao. Možemo podesiti regularni izraz i reći |_+_| za obradu samo redova koji počinju s UUID. Da bismo to učinili, upisujemo sljedeće što uključuje token početka retka (|_+_|):

$

To je već bolje! Sada vidimo samo originalne upute za montiranje. Da bismo još više precizirali izlaz, upisujemo sljedeće i ograničavamo prikaz na prvo polje:

Da imamo više datotečnih sustava montiranih na ovom stroju, dobili bismo urednu tablicu njihovih UUID-ova.

Ugrađene funkcije

|_+_| ima mnoge funkcije koje možete pozvati i koristiti u svojim programima , i iz naredbenog retka i u skriptama. Ako malo kopate, vidjet ćete da je vrlo plodno.

Kako bismo demonstrirali opću tehniku ​​pozivanja funkcije, pogledat ćemo neke numeričke. Na primjer, sljedeće ispisuje kvadratni korijen od 625:

printOglas

Ova naredba ispisuje arktangent od 0 (nula) i -1 (što je matematička konstanta, pi):

awk

U sljedećoj naredbi mijenjamo rezultat |_+_| funkciju prije nego što je ispišemo:

awk

Funkcije mogu prihvatiti izraze kao parametre. Na primjer, evo zamršenog načina da zatražite kvadratni korijen od 25:

awk

awk skripte

Ako vam se naredbeni redak zakomplicira ili razvijete rutinu za koju znate da ćete je htjeti ponovno koristiti, možete prenijeti svoj |_+_| naredbu u skriptu.

U našem primjeru skripte učinit ćemo sve od sljedećeg:

  • Recite ljusci koju izvršnu datoteku treba koristiti za pokretanje skripte.
  • Pripremite |_+_| koristiti |_+_| varijabla separatora polja za čitanje ulaznog teksta s poljima odvojenim dvotočkama (|_+_|).
  • Koristite |_+_| separator izlaznog polja za reći |_+_| koristiti dvotočke (|_+_|) za odvajanje polja u izlazu.
  • Postavite brojač na 0 (nula).
  • Postavite drugo polje svakog retka teksta na praznu vrijednost (to je uvijek x, tako da ga ne moramo vidjeti).
  • Ispišite redak s izmijenjenim drugim poljem.
  • Povećajte brojač.
  • Ispišite vrijednost brojača.

Naša skripta je prikazana u nastavku.

Primjer awk skripte u uređivaču.

The |_+_| pravilo provodi pripremne korake, dok |_+_| pravilo prikazuje vrijednost brojača. Srednje pravilo (koje nema naziv, niti uzorak pa odgovara svakom retku) modificira drugo polje, ispisuje redak i povećava brojač.

Oglas

Prvi red skripte govori ljusci koju izvršnu datoteku treba koristiti (|_+_|, u našem primjeru) za pokretanje skripte. Također prolazi |_+_| (ime datoteke) na |_+_|, koja ga obavještava da će tekst koji će obraditi doći iz datoteke. Mi ćemo prenijeti naziv datoteke skripti kada je pokrenemo.

Uključili smo skriptu u nastavku kao tekst tako da možete izrezati i zalijepiti:

$NF

Spremite ovo u datoteku pod nazivom |_+_|. Do učinite skriptu izvršnom I , upisujemo sljedeće koristeći |_+_|:

awk

Sada ćemo ga pokrenuti i proslijediti |_+_| datoteku u skriptu. Ovo je datoteka |_+_| obradit će za nas, koristeći pravila unutar skripte:

date

Datoteka se obrađuje i svaki redak se prikazuje, kao što je prikazano u nastavku.

Oglas

Unosi x u drugom polju su uklonjeni, ali imajte na umu da su separatori polja i dalje prisutni. Redovi se broje i zbroj se daje na dnu izlaza.

awk ne znači neugodno

|_+_| ne znači nespretno; označava eleganciju. Opisan je kao filtar za obradu i pisac izvješća. Točnije, to su oboje, ili, bolje rečeno, alat koji možete koristiti za oba ova zadatka. U samo nekoliko redaka, |_+_| postiže ono što zahtijeva opsežno kodiranje na tradicionalnom jeziku.

Tu moć iskorištava jednostavan koncept pravila koja sadrže obrasce, koji odabiru tekst za obradu i radnje koje definiraju obradu.

Linux naredbe
Datoteke katran · pv · mačka · tac · chmod · zahvat · razl · sed · S · čovjek · pushd · popd · fsck · testdisk · sljed · F D · pandok · CD · $PATH · awk · pridružiti · jq · preklopiti · jedinstven · journalctl · rep · država · ls · fstab · izbaciti · manje · chgrp · chown · rev · izgled · žice · tip · preimenovati · patentni zatvarač · otvoriti rajsfešlus · montirati · razmontirati · instalirati · fdisk · mkfs · rm · rmdir · rsync · df · gpg · mi · nano · mkdir · iz · ln · zakrpa · Pretvoriti · rclone · usitniti · SRM
Procesi alias · zaslon · vrh · Lijepo · renice · napredak · strace · sustav · tmux · chsh · povijesti · na · serija · besplatno · koji · dmesg · usermod · p.s · chroot · xargs · tty · ružičasti · lsof · vmstat · pauza · zid · Da · ubiti · spavati · sudo · njegov · vrijeme · groupadd · usermod · grupe · lshw · ugasiti · ponovno podizanje sustava · Stop · isključenje · passwd · lscpu · crontab · datum · bg · fg
Umrežavanje netstat · ping · traceroute · ip · ss · tko je · fail2ban · bmon · vas · prst · nmap · ftp · kovrča · wget · tko · tko sam ja · U · iptables · ssh-keygen · ufw

POVEZANO: Najbolja prijenosna računala s Linuxom za programere i entuzijaste

PROČITAJTE SLJEDEĆE Fotografija profila Davea McKaya Dave McKay
Dave McKay je prvi put koristio računala kada je bušena papirna traka bila u modi i od tada se bavi programiranjem. Nakon više od 30 godina u IT industriji, sada je stalni tehnološki novinar. Tijekom svoje karijere radio je kao freelance programer, voditelj međunarodnog tima za razvoj softvera, voditelj projekta IT usluga, a nedavno i kao službenik za zaštitu podataka. Njegovo pisanje objavili su howtogeek.com, cloudsavvyit.com, tenterpriser.com i opensource.com. Dave je Linux evanđelist i zagovornik otvorenog koda.
Pročitajte cijelu biografiju

Zanimljivi Članci