Kako napisati AWK komande i skripte

Komande, sintaksu i primere

Komanda awk je moćan metod za obradu ili analizu tekstualnih datoteka - posebno datoteke podataka koje su organizovane po linijama (redovima) i stupcima.

Jednostavne awk komande mogu se pokrenuti iz komandne linije . Kompleksniji zadaci trebaju biti napisani kao awk programi (tzv. Awk skripte) u datoteku.

Osnovni format komande awk izgleda ovako:

awk 'pattern {action}' ulazna datoteka> izlaz-datoteka

To znači: uzmite svaku liniju ulazne datoteke; ako linija sadrži obrazac primeni akcije na liniju i upisati rezultirajuću liniju u izlaznu datoteku. Ako je obrazac ispušten, akcija se primenjuje na sve linije. Na primjer:

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

Ova izjava uzima element petog stupca svake linije i piše kao liniju u izlaznoj datoteci "output.txt". Varijabla '$ 4' odnosi se na drugu kolonu. Slično tome, možete pristupiti prvoj, drugoj i trećoj koloni sa $ 1, $ 2, $ 3, itd. Podrazumevano se pretpostavlja da su stupci odvojeni razmacima ili tabovima (tzv. Belom prostoru). Dakle, ako ulazna datoteka "table1.txt" sadrži ove linije:

1, Justin Timberlake, Naslov 545, Cijena $ 7.30 2, Taylor Swift, Naslov 723, Cijena $ 7.90 3, Mick Jagger, Naslov 610, Cijena $ 7.90 4, Lady Gaga, Titula 118, Cijena $ 7.30 5, Johnny Cash, Naslov 482, Cijena $ 6.50 6, Elvis Presley, Naslov 335, Cijena $ 7.30 7, John Lennon, Naslov 271, Cijena $ 7.90 8, Michael Jackson, Naslov 373, Cijena $ 5.50

Zatim bi komanda pisala sledeće linije u izlaznu datoteku "output1.txt":

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

Ako je separator stupaca nešto drugo osim razmaka ili tabova, kao što je zapeta, to možete da navedete u awk izjavi kako slijedi:

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

Ovo će izabrati element iz kolone 3 u svakoj liniji ako se smatra da su kolone odvojene zarezom. Prema tome, rezultat u ovom slučaju bio bi:

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

Lista izjava u kovičastim zagradama ('{', '}') se naziva blok. Ako stavite uslovni izraz ispred bloka, izjava unutar bloka će se izvršiti samo ako je uslov tačan.

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

U ovom slučaju, stanje je $ 7 == "\ $ 7.30", što znači da je element u koloni 7 jednak 7,30 dolara. Ponovni znak ispred znaka za dolar se koristi da spreči sistem da tumači $ 7 kao varijablu i umjesto toga bukvalno uzme znak dolara.

Dakle, ova awk izjava odštampava element u 3. koloni svake linije koja ima "7,30 dolara" u koloni 7.

Takođe možete koristiti regularne izraze kao uslov. Na primjer:

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

Niz između dve kose ('/') je regularni izraz. U ovom slučaju, to je samo string "30." To znači da ako linija sadrži niz "30", sistem odštampa element na 3. koloni te linije. Izlaz iz prethodnog primera bi bio:

Timberlake, Gaga, Presley,

Ako su tabelarni elementi brojevi awk mogu izvoditi račune na njih kao u ovom primeru:

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

Osim varijabli koje pristupaju elementima tekućeg reda ($ 1, $ 2, itd.) Postoji promenljiva $ 0 koja se odnosi na kompletan red (linija), a varijabla NF koja drži do broja polja.

Takođe možete definisati nove varijable kao u ovom primeru:

awk '{sum = 0; za (col = 1; kol <= NF; kol +) sum + = $ col; print sum; } '

Ovo izračunava i odštampava zbir svih elemenata svakog reda.

Awk izjave se često kombinuju sa sed naredbama .