Kako napisati AWK ukaze in skripte

Ukaz awk je zmogljiva metoda za obdelavo ali analizo besedilnih datotek. Zlasti analizira podatkovne datoteke, ki so organizirane po vrsticah (vrsticah) in stolpcih. Preproste ukaze awk je mogoče zagnati iz ukazna vrstica. Bolj zapletene naloge je treba zapisati kot awk programe (imenovane awk skripte) v datoteko.

Grafični oblikovalec, ki dela pozno za računalnikom v pisarni
Hero Images / Getty Images

Osnove AWK

Osnovna oblika ukaza awk izgleda takole:

awk 'vzorec {action}' vhodna-datoteka > izhodna-datoteka

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

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

Zgornji stavek vzame element 5. stolpca vsake vrstice in ga zapiše kot vrstico v izhodno datoteko "output.txt." Spremenljivka '$4' se nanaša na četrti stolpec. Podobno lahko dostopate do prvega, drugega in tretjega stolpca z $1, $2, $3 itd. Privzeto se predpostavlja, da so stolpci ločeni s presledki ali tabulatorji (tako imenovani presledki). 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 bi ukaz v izhodno datoteko "output1.txt" zapisal naslednje vrstice:

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

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

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

To bo izbralo element iz stolpca 3 vsake vrstice, če se šteje, da so stolpci ločeni z vejico. Zato bi bil izhod v tem primeru:

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

Pogojni izrazi v AWK

Seznam stavkov znotraj kodrastih oklepajev ('{','}') se imenuje blok. Če postavite a pogojni izraz pred blokom se stavek znotraj bloka izvede le, če je pogoj resničen.

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

V tem primeru je pogoj $7=="\$7,30", kar pomeni, da je element v stolpcu 7 enak $7,30. Poševnica nazaj pred znakom za dolar se uporablja za preprečevanje, da bi sistem razlagal $7 kot spremenljivko in namesto tega dobesedno vzel znak za dolar.

Tako ta stavek awk natisne element v 3. stolpcu vsake vrstice, ki ima v stolpcu 7 "$7,30".

Kot pogoj lahko uporabite tudi regularne izraze. Na primer:

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

Niz med obema poševnicama ('/') je regularni izraz. V tem primeru je to samo niz "30." To pomeni, da če vrstica vsebuje niz "30", sistem natisne element v 3. stolpcu te vrstice. The izhod v zgornjem primeru bi bilo:

Timberlake,
Gaga,
Presley,

Izvedite izračune v AWK

Če so elementi tabele številke, lahko awk na njih izvaja izračune, kot v tem primeru:

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

Poleg spremenljivk, ki dostopajo do elementov trenutne vrstice ($1, $2 itd.), obstaja še spremenljivka $0, ki se nanaša na celotno vrstico (vrstico), in spremenljivka NF, ki drži število polj.

Nove spremenljivke lahko definirate tudi kot v tem primeru:

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

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

Stavki awk so pogosto kombinirani z ukazi sed.