Kako napisati AWK ukaze in skripte

Ukazi, sintaksi in primeri

Ukaz awk je zmogljiv način za obdelavo ali analizo tekstovnih datotek, zlasti podatkovnih datotek, ki jih organizirajo vrstice (vrstice) in stolpci.

Enostavne awk ukaze lahko zaženete iz ukazne vrstice . Zapletene naloge je treba zapisati kot awk programe (tako imenovane awk skripte) v datoteko.

Osnovna oblika ukaza awk je videti takole:

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

To pomeni: vzemite vsako vrstico vhodne datoteke; če vrstica vsebuje vzorec, uporabite dejanje v vrstico in napišete nastalo vrstico v izhodno datoteko. Če je vzorec izpuščen, se dejanje uporablja za vse vrstice. Na primer:

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

Ta izjava vzame element 5. stolpca vsake vrstice in jo zapisuje kot vrstico v izhodni datoteki "output.txt". Spremenljivka "$ 4" se nanaša na drugi stolpec. Podobno lahko dostopate do prvega, drugega in tretjega stolpca z $ 1, $ 2, $ 3 itd. Predpostavljamo, da so stolpci ločeni s presledki ali zavihki (tako imenovani beli prostor). Torej, če vhodna datoteka "table1.txt" vsebuje te vrstice:

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

Nato ukaz zapiše naslednje vrstice v izhodno datoteko "output1.txt":

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

Če je ločilo stolpcev nekaj drugega kot presledki ali zavihki, kot je vejica, lahko to v stavku awk določite na naslednji način:

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

S tem bo izbran element iz stolpca 3 vsake vrstice, če se šteje, da so stolpci ločeni z vejico. Zato bi bila proizvodnja v tem primeru:

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

Seznam izjav v oklepajih ('{', '}') se imenuje blok. Če postavite pogojni izraz pred blok, se izjava v bloku izvede samo, če je pogoj resničen.

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

V tem primeru je stanje $ 7 == "\ $ 7.30", kar pomeni, da je element v stolpcu 7 enak $ 7.30. Nasprotna črka pred znakom dolarja se uporablja za preprečitev, da bi sistem razlagal $ 7 kot spremenljivko in namesto tega vzel znak za dolar dobesedno.

Torej ta awk izjava izpiše element v 3. stolpcu vsake vrstice, ki ima v stolpcu 7,30 $.

Kot pogoj lahko uporabite regularne izraze . Na primer:

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

Niz med dvema poševnicoma ('/') je regularni izraz. V tem primeru je samo niz "30." To pomeni, če vrstica vsebuje niz "30", sistem natisne element v 3. stolpcu te vrstice. Rezultat v zgornjem primeru bi bil:

Timberlake, Gaga, Presley,

Če so elementi tabele številke awk, se lahko izvajajo izračuni na njih, kot v tem primeru:

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

Poleg spremenljivk, ki dostopajo do elementov trenutne vrstice ($ 1, $ 2 itd.), Obstaja spremenljivka $ 0, ki se nanaša na celotno vrstico (vrstico), in spremenljivko NF, ki ima na število polj.

Nove spremenljivke lahko opredelite kot v tem primeru:

awk '{vsota = 0; za (col = 1; col <= NF; col +) vsota + = $ col; vsota tiskanja; } '

To izračuna in natisne vsoto vseh elementov vsake vrstice.

Izjave Awk se pogosto kombinirajo s sed ukazi .