Hvernig á að skrifa AWK skipanir og forskriftir

Skipanir, setningafræði og dæmi

The awk stjórn er öflug aðferð til að vinna eða greina textaskrár - einkum gagnaskrár sem eru skipulögð af línum (raðir) og dálka.

Einföld awk skipanir er hægt að keyra frá stjórn lína . Flóknari verkefni ætti að vera skrifuð sem awk forrit (svokölluð awk skrift) í skrá.

Grundvallarsnið awk stjórn lítur svona út:

awk 'mynstur {action}' input-file> framleiðsla-skrá

Þetta þýðir: taktu hverja línu inntakslagsins; Ef línan inniheldur mynsturið skaltu beita aðgerðinni við línuna og skrifa þá línu sem er til framleiðslustaðarins. Ef mynstur er sleppt er aðgerðin beitt á alla línu. Til dæmis:

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

Þessi yfirlýsing tekur þátt í 5. dálki hvers lína og skrifar það sem línu í framleiðslulistanum "output.txt". Breytu "$ 4" vísar til annarrar dálksins. Á sama hátt geturðu fengið aðgang að fyrsta, öðrum og þriðja dálknum, með $ 1, $ 2, $ 3, osfrv. Sjálfgefið er að dálkarnir séu aðskilin með bilum eða flipum (svokölluð hvítt bil). Svo, ef innsláttarskráin "table1.txt" inniheldur þessar línur:

1, Justin Timberlake, Titill 545, Verð $ 7,30 2, Taylor Swift, Titill 723, Verð $ 7.90 3, Mick Jagger, Titill 610, Verð $ 7.90 4, Lady Gaga, Titill 118, Verð $ 7,30 5, Johnny Cash, Titill 482, Verð $ 6.50 6, Elvis Presley, Titill 335, Verð $ 7,30 7, John Lennon, Titill 271, Verð $ 7.90 8, Michael Jackson, Titill 373, Verð $ 5,50

Þá myndi stjórnin skrifa eftirfarandi línur til framleiðslulánsins "output1.txt":

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

Ef dálkaskilinn er eitthvað annað en rými eða flipa, eins og kommu, getur þú tilgreint það í awk-yfirlýsingunni sem hér segir:

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

Þetta mun velja þáttinn úr dálki 3 í hverri línu ef dálkarnir eru talin aðskilin með kommu. Því framleiðsla, í þessu tilviki, væri:

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

Listi yfir yfirlýsingar inni í hrokkið sviga ('{', '}') er kölluð blokk. Ef þú setur skilyrt tjáning fyrir framan blokk, verður yfirlýsingin innan blokkarinnar aðeins framkvæmd ef ástandið er satt.

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

Í þessu tilfelli er ástandið $ 7 == "\ $ 7.30", sem þýðir að þátturinn í dálki 7 er jöfn $ 7,30. Bakslash fyrir framan dollara táknið er notað til að koma í veg fyrir að kerfið túlki $ 7 sem breytu og í staðinn að taka dollara skilaboðin bókstaflega.

Þannig er þetta óþekkta yfirlýsing prentað út þáttinn í 3. dálki hvers lína sem hefur "$ 7,30" í dálki 7.

Þú getur einnig notað reglulega segð sem skilyrði. Til dæmis:

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

Strikið milli tveggja skástanna ('/') er venjulegur tjáning. Í þessu tilfelli er það bara strengurinn "30." Þetta þýðir að ef lína inniheldur strenginn "30", kerfið prentar út þáttinn í 3. dálki þessara línu. Framleiðsla í dæminu hér að ofan væri:

Timberlake, Gaga, Presley,

Ef borðþættir eru tölur awk getur keyrt útreikninga á þeim eins og í þessu dæmi:

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

Að auki breytur sem fá aðgang að þætti í núverandi röð ($ 1, $ 2, osfrv.) Er breytu $ 0 sem vísar til heillrar línu (línu) og breytu NF sem heldur við fjölda reiti.

Þú getur einnig skilgreint nýjar breytur eins og í þessu dæmi:

awk '{summa = 0; fyrir (col = 1; col <= NF; col ++) summa + = $ col; prenta summa; } '

Þetta reiknar og prentar summan af öllum þáttum hvers röð.

Awk yfirlýsingar eru oft sameinaðir með beinum skipunum .