20 de exemple awk

20 Awk Examples



Există multe instrumente utilitare în sistemul de operare Linux pentru a căuta și genera un raport din date text sau fișier. Utilizatorul poate efectua cu ușurință mai multe tipuri de căutare, înlocuire și generare de rapoarte prin utilizarea comenzilor awk, grep și sed. awk nu este doar o comandă. Este un limbaj de script care poate fi utilizat atât din terminal, cât și din fișierul awk. Acceptă variabila, declarația condițională, matrice, bucle etc., ca alte limbaje de scriptare. Poate citi orice conținut de fișier rând cu rând și să separe câmpurile sau coloanele pe baza unui delimitator specific. De asemenea, acceptă expresia regulată pentru căutarea anumitor șiruri în conținutul textului sau fișierul și ia măsuri dacă se găsește o potrivire. Cum puteți utiliza comanda și scriptul awk este prezentat în acest tutorial folosind 20 de exemple utile.

Conținut:

  1. awk cu printf
  2. awk să se împartă pe spațiul alb
  3. awk pentru a schimba delimitatorul
  4. awk cu date delimitate de tab-uri
  5. awk cu date CSV
  6. awk regex
  7. awk insensibil regex
  8. awk cu variabila nf (număr de câmpuri)
  9. awk gensub () function
  10. awk cu funcția rand ()
  11. funcția awk definită de utilizator
  12. awk dacă
  13. variabile awk
  14. matrici awk
  15. buclă awk
  16. awk pentru a imprima prima coloană
  17. awk pentru a imprima ultima coloană
  18. awk cu grep
  19. awk cu fișierul script bash
  20. awk cu sed

Folosind awk cu printf

printf () funcția este utilizată pentru a formata orice ieșire în majoritatea limbajelor de programare. Această funcție poate fi utilizată cu awk comanda pentru a genera diferite tipuri de ieșiri formatate. comanda awk utilizată în principal pentru orice fișier text. Creați un fișier text numit angajat.txt cu conținutul dat mai jos unde câmpurile sunt separate prin tab („ t”).







angajat.txt



1001 John sena 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Ficat Jonny 70000

Următoarea comandă awk va citi datele din angajat.txt fișier linie cu linie și tipăriți primul fișier după formatare. Aici, % 10s n înseamnă că ieșirea va avea 10 caractere. Dacă valoarea ieșirii este mai mică de 10 caractere, atunci spațiile vor fi adăugate în partea din față a valorii.



$ awk„{printf”% 10s n', $ 1}'angajat.txt

Ieșire:





Accesați Conținut



awk să se împartă pe spațiul alb

Separatorul implicit de cuvinte sau câmpuri pentru divizarea oricărui text este spațiul alb. comanda awk poate lua valoarea textului ca intrare în diferite moduri. Textul introdus este trecut de la aruncat comandă în exemplul următor. Textul, ' Îmi place programarea ”Va fi împărțit prin separator implicit, spaţiu , iar al treilea cuvânt va fi tipărit ca ieșire.

$aruncat „Îmi place să programez” | awk „{print $ 3}”

Ieșire:

Accesați Conținut

awk pentru a schimba delimitatorul

comanda awk poate fi utilizată pentru a schimba delimitatorul pentru orice conținut de fișier. Să presupunem că aveți un fișier text numit phone.txt cu următorul conținut unde „:” este utilizat ca separator de câmp al conținutului fișierului.

phone.txt

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Rulați următoarea comandă awk pentru a schimba delimitatorul, „:” de „-” la conținutul fișierului, phone.txt .

$ cat phone.txt
$ awk '$ 1 = $ 1' FS = ':' OFS = '-' phone.txt

Ieșire:

Accesați Conținut

awk cu date delimitate de tab-uri

comanda awk are multe variabile încorporate care sunt folosite pentru a citi textul în moduri diferite. Două dintre ele sunt FS și OFS . FS este separator de câmp de intrare și OFS este variabilele de separare a câmpului de ieșire. Utilizările acestor variabile sunt prezentate în această secțiune. Creeaza o filă fișier separat numit input.txt cu următorul conținut pentru a testa utilizările FS și OFS variabile.

Input.txt

Limbaj de script pentru partea clientului
Limbaj de script pe partea de server
Server de baze de date
Server Web

Utilizarea variabilei FS cu tab

Următoarea comandă va împărți fiecare linie de input.txt fișier pe baza filei („ t”) și tipăriți primul câmp al fiecărei linii.

$awk „{print $ 1}” FS=„ t”input.txt

Ieșire:

Utilizarea variabilei OFS cu tab

Următoarea comandă awk va imprima fișierul 9a și 5a câmpuri de „Ls -l” ieșire comandă cu separator de file după tipărirea titlului coloanei Nume și mărimea . Aici, OFS variabila este utilizată pentru a formata ieșirea printr-o filă.

$eu sunt -la
$eu sunt -la | awk -v OFS=„ t” 'BEGIN {printf'% s t% s n ',' Name ',' Size '} {print $ 9, $ 5}'

Ieșire:

Accesați Conținut

awk cu date CSV

Conținutul oricărui fișier CSV poate fi analizat în mai multe moduri utilizând comanda awk. Creați un fișier CSV numit „ client.csv 'Cu următorul conținut pentru a aplica comanda awk.

client.txt

Id, nume, e-mail, telefon
1, Sophia, [email protected], (862) 478-7263
2, Amelia, [email protected], (530) 764-8000
3, Emma, ​​[email protected], (542) 986-2390

Citirea unui singur câmp al fișierului CSV

„-F” opțiunea este utilizată cu comanda awk pentru a seta delimitatorul pentru împărțirea fiecărei linii a fișierului. Următoarea comandă awk va imprima fișierul Nume câmp de clientul.csv fişier.

$pisicăclient.csv
$awk -F ',' „{print $ 2}”client.csv

Ieșire:

Citirea câmpurilor multiple prin combinarea cu alt text

Următoarea comandă va imprima trei câmpuri de client.csv prin combinarea textului titlului, Nume, e-mail și telefon . Prima linie a client.csv fișierul conține titlul fiecărui câmp. NU variabila conține numărul de linie al fișierului când comanda awk analizează fișierul. În acest exemplu, NR variabila este utilizată pentru a omite prima linie a fișierului. Ieșirea va afișa 2nd, 3rdși 4acâmpurile tuturor liniilor, cu excepția primei linii.

$awk -F ',' „NR> 1 {print” Nume: „2 USD”, e-mail: „3 USD”, telefon: „4 USD”client.csv

Ieșire:

Citirea fișierului CSV folosind un script awk

scriptul awk poate fi executat executând fișierul awk. Modul în care puteți crea un fișier awk și rula fișierul este prezentat în acest exemplu. Creați un fișier numit awkcsv.awk cu următorul cod. ÎNCEPE cuvântul cheie este utilizat în script pentru informarea comenzii awk pentru a executa scriptul ÎNCEPE prima parte înainte de a executa alte sarcini. Aici, separatorul de câmp ( FS ) este utilizat pentru a defini delimitatorul de divizare și 2ndși 1Sfcâmpurile vor fi tipărite conform formatului utilizat în funcția printf ().

awkcsv.awk
ÎNCEPE{FS= ','} { printf „% 5s (% s) n',$2,$1}

Alerga awkcsv.awk fișier cu conținutul clientul.csv fișier prin următoarea comandă.

$awk -fawkcsv.awk client.csv

Ieșire:

Accesați Conținut

awk regex

Expresia regulată este un model care este folosit pentru a căuta orice șir dintr-un text. Diferite tipuri de sarcini complicate de căutare și înlocuire pot fi realizate foarte ușor folosind expresia regulată. Unele utilizări simple ale expresiei regulate cu comanda awk sunt prezentate în această secțiune.

Personaj asortata stabilit

Următoarea comandă se va potrivi cu cuvântul Prost sau bool sau Misto cu șirul de intrare și tipăriți dacă cuvântul se găsește. Aici, Păpuşă nu se va potrivi și nu se va imprima.

$printf 'Prost nMisto nPăpuşă nbool ' | awk „/ [FbC] ool /”

Ieșire:

Căutarea șirului la începutul liniei

„^” simbolul este folosit în expresia regulată pentru a căuta orice tipar la începutul liniei. ‘ Linux ” cuvântul va fi căutat la începutul fiecărui rând al textului din exemplul următor. Aici, două rânduri încep cu textul, ‘Linux 'Și aceste două linii vor fi afișate în ieșire.

$aruncat -Și „Linux este gratuit nEste un software open-source nLinuxHint este
un site de blog popular '
| awk „/ ^ Linux /”

Ieșire:

Căutarea șirului la sfârșitul liniei

„$” simbolul este utilizat în expresia regulată pentru a căuta orice tipar la sfârșitul fiecărui rând al textului. ‘ Script Cuvântul este căutat în exemplul următor. Aici, două rânduri conțin cuvântul, Script la sfârșitul liniei.

$aruncat -Și 'Script PHP nJavaScript nProgramare vizuală | awk „/ Script $ /”

Ieșire:

Căutarea prin omiterea anumitor seturi de caractere

„^” simbolul indică începutul textului atunci când este utilizat în fața oricărui șir de caractere („/ ^… /”) sau înainte de orice set de caractere declarat de ^ [...] . Dacă „^” simbolul este folosit în a treia paranteză, [^…] apoi setul de caractere definit în paranteză va fi omis în momentul căutării. Următoarea comandă va căuta orice cuvânt care nu începe cu „F” dar terminând cu ‘ ool '. Misto și bool vor fi tipărite în funcție de model și date text.

$ printf 'Prost nMisto nPăpuşă nbool ' |awk'/ [^ F] ool /'

Ieșire:

Accesați Conținut

awk insensibil regex

În mod implicit, expresia regulată efectuează căutări sensibile la majuscule și minuscule la căutarea oricărui model din șir. Căutarea insensibilă la majuscule și minuscule poate fi făcută prin comanda awk cu expresia regulată. În exemplul următor, pentru a reduce() funcția este utilizată pentru a efectua căutări insensibile la majuscule. Aici, primul cuvânt din fiecare linie a textului de intrare va fi convertit în minusculă folosind pentru a reduce() funcționează și se potrivește cu modelul de expresie regulată. tupper () funcția poate fi, de asemenea, utilizată în acest scop, în acest caz, modelul trebuie definit prin toate literele mari. Textul definit în exemplul următor conține cuvântul de căutare, 'Web ’În două rânduri care vor fi tipărite ca ieșire.

$aruncat -Și 'Web design ndezvoltare web nCadru' | awk 'tolower ($ 0) ~ / ^ web /;'

Ieșire:

Accesați Conținut

awk cu variabila NF (număr de câmpuri)

NF este o variabilă încorporată a comenzii awk care este utilizată pentru a număra numărul total de câmpuri din fiecare linie a textului de intrare. Creați orice fișier text cu mai multe linii și mai multe cuvinte. input.txt aici este utilizat fișierul care este creat în exemplul anterior.

Folosind NF din linia de comandă

Aici, prima comandă este utilizată pentru a afișa conținutul input.txt fișier și a doua comandă este utilizată pentru a afișa numărul total de câmpuri din fiecare linie a fișierului folosind NF variabil.

$ cat input.txt
$ awk '{print NF}' input.txt

Ieșire:

Utilizarea NF în fișierul awk

Creați un fișier awk numit număr.awk cu scenariul dat mai jos. Când acest script se va executa cu orice date text, fiecare conținut de linie cu câmpuri totale va fi tipărit ca ieșire.

număr.awk

{tipărește $0}
{imprimare'[Total câmpuri:'NF']'}

Rulați scriptul urmând următoarea comandă.

$awk -fcount.awk input.txt

Ieșire:

Accesați Conținut

awk gensub () function

getsub () este o funcție de substituție care este utilizată pentru a căuta șiruri bazate pe un delimitator particular sau un model de expresie regulată. Această funcție este definită în 'bălălău' pachet care nu este instalat implicit. Sintaxa pentru această funcție este dată mai jos. Primul parametru conține modelul de expresie regulată sau delimitatorul de căutare, al doilea parametru conține textul de înlocuire, al treilea parametru indică modul în care se va face căutarea și ultimul parametru conține textul în care va fi aplicată această funcție.

Sintaxă:

gensub(regexp, înlocuire, cum[, țintă])

Rulați următoarea comandă pentru instalare bălălău pachet pentru utilizare getsub () funcționează cu comanda awk.

$ sudo apt-get install gawk

Creați un fișier text numit „ salesinfo.txt 'Cu următorul conținut pentru a practica acest exemplu. Aici, câmpurile sunt separate printr-o filă.

salesinfo.txt

700000 al meu
800000 dvs.
Miercuri 750000
Colectați 200000
Vin 430000
Sâmbătă 820000

Rulați următoarea comandă pentru a citi câmpurile numerice ale fișierului salesinfo.txt înregistrați și tipăriți totalul sumei vânzărilor. Aici, al treilea parametru, „G” indică căutarea globală. Aceasta înseamnă că modelul va fi căutat în conținutul complet al fișierului.

$awk '{x = gensub (' t ',' ',' G ', $ 2); printf x '+'} END {print 0} 'salesinfo.txt| bc -la

Ieșire:

Accesați Conținut

awk cu funcția rand ()

rand() funcția este utilizată pentru a genera orice număr aleator mai mare de 0 și mai mic de 1. Deci, va genera întotdeauna un număr fracțional mai mic de 1. Următoarea comandă va genera un număr aleator fracțional și va înmulți valoarea cu 10 pentru a obține un număr mai mare de 1. Pentru a aplica funcția printf () va fi tipărit un număr fracțional cu două cifre după punctul zecimal. Dacă executați următoarea comandă de mai multe ori, veți obține rezultate diferite de fiecare dată.

$awk 'BEGIN {printf' Numărul este =%. 2f n ', rand () * 10}'

Ieșire:

Accesați Conținut

funcția awk definită de utilizator

Toate funcțiile utilizate în exemplele anterioare sunt funcții încorporate. Dar puteți declara o funcție definită de utilizator în scriptul dvs. awk pentru a efectua o anumită sarcină. Să presupunem că doriți să creați o funcție personalizată pentru a calcula aria unui dreptunghi. Pentru a efectua această sarcină, creați un fișier numit „ area.awk ’Cu următorul script. În acest exemplu, o funcție definită de utilizator denumită zonă() este declarat în scriptul care calculează aria pe baza parametrilor de intrare și returnează valoarea zonei. getline comanda este utilizată aici pentru a prelua datele de la utilizator.

area.awk

# Calculați suprafața
funcţiezonă(înălţime,lăţime){
întoarcereînălţime*lăţime
}

# Începe executarea
ÎNCEPE{
imprimare„Introduceți valoarea înălțimii:”
getline h< „-”
imprimare'Introduceți valoarea lățimii:'
getline w< „-”
imprimare„Zona =”zonă(h,în)
}

Rulați scriptul.

$awk -farea.awk

Ieșire:

Accesați Conținut

awk if exemplu

awk acceptă declarații condiționate ca alte limbaje de programare standard. Trei tipuri de declarații if sunt prezentate în această secțiune utilizând trei exemple. Creați un fișier text numit items.txt cu următorul conținut.

items.txt

HDD Samsung 100 USD
Mouse A4Tech
Imprimantă HP 200 USD

Simplu dacă exemplu :

următoarea comandă va citi conținutul items.txt fișier și verificați 3rd valoarea câmpului în fiecare linie. Dacă valoarea este goală, va imprima un mesaj de eroare cu numărul liniei.

$awk '{if ($ 3 ==' ') print' Câmpul de preț lipsește în linia 'NR}'items.txt

Ieșire:

exemplu if-else:

Următoarea comandă va imprima prețul articolului dacă 3rdcâmpul există în linie, altfel va imprima un mesaj de eroare.

$ awk'{if ($ 3 ==' ') print' Câmpul Preț lipsește '
altfel tipăriți „prețul articolului este„ $ 3} ”
obiecte.txt

Ieșire:

exemplu if-else-if:

Când următoarea comandă se va executa de la terminal, atunci va primi intrarea de la utilizator. Valoarea de intrare va fi comparată cu fiecare condiție dacă condiția este adevărată. Dacă orice condiție devine adevărată, atunci se va imprima nota corespunzătoare. Dacă valoarea de intrare nu se potrivește cu nicio condiție, atunci se va tipări.

$awk 'BEGIN {print' Introduceți marca: '
marca getline<'-'
dacă (marcați = = 90) tipăriți „A +”
altfel dacă (marca> = 80) tipăriți „A”
altfel dacă (marca> = 70) tipăriți „B +”
altfel tipăriți „Fail”} '

Ieșire:

Accesați Conținut

variabile awk

Declarația variabilei awk este similară cu declarația variabilei shell. Există o diferență în citirea valorii variabilei. Simbolul „$” este utilizat cu numele variabilei pentru variabila shell pentru a citi valoarea. Dar nu este nevoie să utilizați „$” cu variabila awk pentru a citi valoarea.

Folosind o variabilă simplă:

Următoarea comandă va declara o variabilă numită „Site” iar acelei variabile i se atribuie o valoare șir. Valoarea variabilei este tipărită în următoarea instrucțiune.

$awk 'BEGIN {site =' LinuxHint.com '; site tipărit} '

Ieșire:

Utilizarea unei variabile pentru a extrage date dintr-un fișier

Următoarea comandă va căuta cuvântul „Imprimantă” în dosar items.txt . Dacă orice linie a fișierului începe cu ‘Imprimantă 'Atunci va stoca valoarea lui 1Sf , 2nd și 3rd câmpuri în trei variabile. Nume și Preț variabilele vor fi tipărite.

$ awk'/ Printer / {name = $ 1; brand = 2 $; price = 3 $; print' item name = 'name;
print 'item price =' price} '
obiecte.txt

Ieșire:

Accesați Conținut

matrici awk

Atât matricele numerice, cât și cele asociate pot fi utilizate în awk. Declarația variabilă matrice în awk este aceeași cu alte limbaje de programare. Unele utilizări ale matricelor sunt prezentate în această secțiune.

Aranjament asociativ:

Indexul tabloului va fi orice șir pentru tabloul asociativ. În acest exemplu, sunt declarate și tipărite o matrice asociativă de trei elemente.

$awk 'ÎNCEPE {
books ['Web Design'] = 'Învățarea HTML 5';
books ['Web Programming'] = 'PHP și MySQL'
books ['PHP Framework'] = 'Învățarea Laravel 5'
printf '% s n% s n% s n', cărți ['Web Design'], cărți ['Programare Web'],
books ['PHP Framework']} '

Ieșire:

Matrice numerică:

O matrice numerică de trei elemente este declarată și tipărită prin separarea filei.

$ awk'ÎNCEPE {
număr [0] = 80;
număr [1] = 55;
număr [2] = 76;

# imprimare elemente matrice
printf 'Valori matrice:% d t% d t% d n', numărul [0], numărul [1], numărul [2]; } '

Ieșire:

Accesați Conținut

buclă awk

Trei tipuri de bucle sunt acceptate de awk. Utilizările acestor bucle sunt prezentate aici folosind trei exemple.

În timp ce bucla:

bucla while care este utilizată în următoarea comandă va itera de 5 ori și va ieși din buclă pentru instrucțiunea break.

$ awk 'ÎNCEPE {n = 1; în timp ce (n 5) pauză; print n; n ++}} '

Ieșire:

Pentru buclă:

Pentru bucla utilizată în următoarea comandă awk se va calcula suma de la 1 la 10 și se va imprima valoarea.

$awk 'BEGIN {sum = 0; pentru (n = 1; n<= 10; n++) sum=sum+n; print sum }'

Ieșire:

Buclă Do-while:

o buclă do-while a următoarei comenzi va imprima toate numerele pare de la 10 la 5.

$awk 'BEGIN {contor = 10; faceți {if (contor% 2 == 0) print contor; tejghea-- }
while (contor> 5)} '

Ieșire:

Accesați Conținut

awk pentru a imprima prima coloană

Prima coloană a oricărui fișier poate fi tipărită utilizând variabila $ 1 în awk. Dar dacă valoarea primei coloane conține mai multe cuvinte, atunci se imprimă doar primul cuvânt din prima coloană. Prin utilizarea unui delimitator specific, prima coloană poate fi tipărită corect. Creați un fișier text numit studenți.txt cu următorul conținut. Aici, prima coloană conține textul a două cuvinte.

Studenți.txt

Kaniz Fatema 30alot
35. Abir Hossainalot
Ioan Avraam 40alot

Rulați comanda awk fără niciun delimitator. Prima parte a primei coloane va fi tipărită.

$awk „{print $ 1}”studenți.txt

Rulați comanda awk cu următorul delimitator. Partea completă a primei coloane va fi tipărită.

$awk -F „\ s \ s” „{print $ 1}”studenți.txt

Ieșire:

Accesați Conținut

awk pentru a imprima ultima coloană

$ (NF) variabila poate fi utilizată pentru a imprima ultima coloană a oricărui fișier. Următoarele comenzi awk vor imprima ultima parte și partea completă a ultimei coloane a elevii.txt fişier.

$awk „{print $ (NF)}”studenți.txt
$awk -F „\ s \ s” „{print $ (NF)}”studenți.txt

Ieșire:

Accesați Conținut

awk cu grep

grep este o altă comandă utilă a Linux pentru a căuta conținut într-un fișier bazat pe orice expresie regulată. Modul în care ambele comenzi awk și grep pot fi utilizate împreună este prezentat în exemplul următor. prindere comanda este utilizată pentru a căuta informații despre ID-ul angajatului, „ 1002 'Din angajatul.txt fişier. Ieșirea comenzii grep va fi trimisă la awk ca date de intrare. Bonusul de 5% va fi numărat și tipărit pe baza salariului identificatorului de angajat, „ 1002 ' prin comanda awk.

$pisicăangajat.txt
$prindere „1002”angajat.txt| awk -F „ t” '{print $ 2' va primi $ '($ 3 * 5) / 100' bonus '}'

Ieșire:

Accesați Conținut

awk cu fișier BASH

La fel ca alte comenzi Linux, comanda awk poate fi folosită și într-un script BASH. Creați un fișier text numit clienți.txt cu următorul conținut. Fiecare linie a acestui fișier conține informații despre patru câmpuri. Acestea sunt ID-ul clientului, numele, adresa și numărul de telefon mobil, acestea fiind separate prin ‘/ '.

clienți.txt

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, VALLECITO, California / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Creați un fișier bash numit item_search.bash cu următorul script. Conform acestui script, valoarea stării va fi preluată de la utilizator și căutată în clienții.txt depuneți de prindere comanda și trecut la comanda awk ca intrare. Comanda Awk va fi citită 2nd și 4a câmpurile fiecărei linii. Dacă valoarea de intrare se potrivește cu orice valoare de stare de clienți.txt fișier, apoi va imprima clientul Nume și număr de telefon mobil , în caz contrar, va imprima mesajul Nu a fost găsit niciun client .

item_search.bash

#! / bin / bash
aruncat 'Introduceți numele statului:'
cititstat
Clienți=prindere '$ stat'clienți.txt| awk -F „/” „{print” Numele clientului: „2 USD”,
Nr. Mobil: „$ 4}”

dacă [ '$ clienți' !='' ];atunci
aruncat $ clienți
altceva
aruncat „Nu a fost găsit niciun client”
fi

Rulați următoarele comenzi pentru a afișa ieșirile.

$pisicăclienți.txt
$bashitem_search.bash

Ieșire:

Accesați Conținut

awk cu sed

Un alt instrument de căutare util al Linux este sed . Această comandă poate fi utilizată atât pentru căutarea, cât și pentru înlocuirea textului oricărui fișier. Următorul exemplu arată utilizarea comenzii awk cu sed comanda. Aici, comanda sed va căuta toate numele angajaților începând cu „ J 'Și trece la comanda awk ca intrare. awk va imprima angajatul Nume și ID după formatare.

$pisicăangajat.txt
$sed -n „/ J / p”angajat.txt| awk -F „ t” '{printf'% s (% s) n ', $ 2, $ 1}'

Ieșire:

Accesați Conținut

Concluzie:

Puteți utiliza comanda awk pentru a crea diferite tipuri de rapoarte pe baza oricăror date tabulare sau delimitate după filtrarea corectă a datelor. Sper că veți putea afla cum funcționează comanda awk după ce ați practicat exemplele prezentate în acest tutorial.