Kako napisati AWK naredbe i skripte

Naredbe, sintaksa i primjeri

Awk naredba moćna je metoda za obradu ili analizu tekstualnih datoteka - posebice, podatkovnih datoteka koje organiziraju linije (redci) i stupci.

Jednostavne awk naredbe mogu se pokrenuti iz naredbenog retka . Složenije zadaće trebaju biti napisane kao awk programi (tzv. Awk skripte) u datoteku.

Osnovni format awk naredbe izgleda ovako:

awk 'pattern {action}' input-file> izlazna datoteka

To znači: uzmite svaku liniju ulazne datoteke; ako redak sadrži uzorak, primijenite akciju na liniju i napišite dobiveni redak u izlaznu datoteku. Ako je obrazac izostavljen, radnja se primjenjuje na cijelu liniju. Na primjer:

awk '{print $ 5}' table1.txt> output1.txt

Ova izjava preuzima element 5. stupca svake linije i piše kao redak u izlaznoj datoteci "output.txt". Varijabla '$ 4' odnosi se na drugi stupac. Slično tome, možete pristupiti prvom, drugom i trećem stupcu sa $ 1, $ 2, $ 3 itd. Prema zadanim se stupcima pretpostavlja da su odvojeni razmakom ili karticama (tzv. Bijeli prostor). Dakle, ako ulazna datoteka "table1.txt" sadrži sljedeće retke:

1, Justin Timberlake, naslov 545, cijena 7,30 dolara 2, Taylor Swift, naslov 723, cijena 7,90 dolara 3, Mick Jagger, naslov 610, cijena 7,90 dolara 4, Lady Gaga, naslov 118, cijena 7,30 dolara 5, Johnny Cash, naslov 482, cijena 6,50 kn 6, Elvis Presley, naslov 335, cijena 7,30 dolara 7, John Lennon, naslov 271, cijena 7,90 dolara 8, Michael Jackson, naslov 373, cijena 5,50 dolara

Tada će naredba napisati sljedeće retke u izlaznu datoteku "output1.txt":

545, 723, 610, 118, 482, 335, 271, 373,

Ako je razdjelnik stupaca nešto drugo osim razmaka ili kartica, kao što je zarez, to možete odrediti u izjavi awk kako slijedi:

awk -F, '{print $ 3}' table1.txt> output1.txt

Ovo će odabrati element iz stupca 3 svakog retka ako se smatra da su stupci odvojeni zarezom. Stoga bi izlaz, u ovom slučaju, bio:

Naslov 545 Naslov 723 Naslov 610 Naslov 118 Naslov 482 Naslov 335 Naslov 271 Naslov 373

Popis izjava unutar kovrčastih zagrada ('{', '}') zove se blok. Ako stavite uvjetni izraz ispred bloka, izjava unutar bloka izvršit će se samo ako je uvjet istinit.

awk '$ 7 == "\ $ 7.30" {print $ 3} "table1.txt

U tom slučaju, uvjet je $ 7 == "\ $ 7.30", što znači da je element u stupcu 7 jednak 7,30 dolara. Pozadina ispred znaka dolara koristi se za sprječavanje sustava da tumači 7 dolara kao varijablu i umjesto toga dosegne slovenski znak doslovno.

Dakle, ova izjava awk ispisuje element u 3. stupcu svakog retka koji ima "7,30 dolara" u stupcu 7.

Također možete koristiti regularne izraze kao uvjet. Na primjer:

awk '/ 30 / {print $ 3}' tablica1.txt

Niz između dviju crta ('/') regularni je izraz. U ovom slučaju, to je samo niz "30." To znači da ako linija sadrži niz "30", sustav ispisuje element u 3. stupcu tog retka. Izlaz u gornjem primjeru bi bio:

Timberlake, Gaga, Presley,

Ako elementi tablice brojevi awk mogu izvoditi izračune na njima kao u ovom primjeru:

awk '{print ($ 2 * $ 3) + $ 7}'

Osim varijabli koje pristupaju elementima trenutnog retka ($ 1, $ 2, itd.) Postoji varijabla $ 0 koja se odnosi na cijeli redak (redak) i varijablu NF koja se drži brojem polja.

Također možete definirati nove varijable kao u ovom primjeru:

awk '{sum = 0; za (col = 1; col <= NF; col + + sum + = $ col; ispisati zbroj; }”

Ovo izračunava i ispisuje zbroj svih elemenata svakog retka.

Awkove izjave često se kombiniraju sa sed naredbama .