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-datotekaTo 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.txtOva 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.50Zatim 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.txtOvo ć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 373Lista 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.txtU 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.txtNiz 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 .