Sut i Ysgrifennu Rheolau a Chofysgrifau AWK

Gorchmynion, cystrawen, ac enghreifftiau

Mae'r gorchymyn awk yn ddull pwerus ar gyfer prosesu neu ddadansoddi ffeiliau testun-yn arbennig, ffeiliau data sy'n cael eu trefnu gan linellau (rhesi) a cholofnau.

Gellir rhedeg gorchmynion awk syml o'r llinell orchymyn . Dylid ysgrifennu tasgau mwy cymhleth fel rhaglenni awk (sgriptiau awk o'r enw hyn) i ffeil.

Mae fformat sylfaenol gorchymyn awk yn edrych fel hyn:

awk 'patrwm {action}' input-file> output-file

Mae hyn yn golygu: cymerwch bob llinell o'r ffeil fewnbwn; os yw'r llinell yn cynnwys y patrwm, cymhwyswch y camau i'r llinell ac ysgrifennwch y llinell ganlynol i'r ffeil allbwn. Os na chaiff y patrwm ei hepgor, gweithredir y gweithrediad i bob llinell. Er enghraifft:

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

Mae'r datganiad hwn yn cymryd elfen y 5ed golofn ym mhob llinell ac yn ei ysgrifennu fel llinell yn y ffeil allbwn "output.txt". Mae'r newidyn '$ 4' yn cyfeirio at yr ail golofn. Yn yr un modd, gallwch chi gael mynediad at y golofn gyntaf, yr ail a'r trydydd golofn, gyda $ 1, $ 2, $ 3, ac ati. Tybir bod bylchau neu dabiau wedi'u gwahanu gan y colofnau rhagosodedig (a elwir yn ofod gwyn). Felly, os yw'r ffeil mewnbwn "table1.txt" yn cynnwys y llinellau hyn:

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

Yna byddai'r gorchymyn yn ysgrifennu'r llinellau canlynol i'r ffeil allbwn "output1.txt":

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

Os yw'r gwahanydd colofn yn rhywbeth heblaw am leoedd neu fannau, fel coma, gallwch nodi hynny yn y datganiad awk fel a ganlyn:

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

Bydd hyn yn dewis yr elfen o golofn 3 o bob llinell os ystyrir bod y colofnau yn cael eu gwahanu gan goma. Felly, yr allbwn, yn yr achos hwn, fyddai:

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

Gelwir y rhestr o ddatganiadau y tu mewn i'r cromfachau bras ('{', '}') yn bloc. Os rhowch fynegiant amodol o flaen bloc, bydd y datganiad y tu mewn i'r bloc yn cael ei weithredu dim ond os yw'r amod yn wir.

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

Yn yr achos hwn, yr amod yw $ 7 == "\ $ 7.30", sy'n golygu bod yr elfen yng ngholofn 7 yn hafal i $ 7.30. Defnyddir y gefn o flaen yr arwydd ddoler i atal y system rhag dehongli $ 7 fel newidyn ac yn hytrach cymerwch yr arwydd ddoler yn llythrennol.

Felly mae'r datganiad awk hwn yn argraffu'r elfen yn y 3ydd golofn o bob llinell sydd â "$ 7.30" yng ngholofn 7.

Gallwch hefyd ddefnyddio ymadroddion rheolaidd fel y cyflwr. Er enghraifft:

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

Y llinyn rhwng y ddau slashes ('/') yw'r mynegiant rheolaidd. Yn yr achos hwn, dim ond y llinyn "30." Mae hyn yn golygu os yw llinell yn cynnwys y llinyn "30", mae'r system yn argraffu'r elfen yn y 3ydd golofn o'r llinell honno. Yr allbwn yn yr enghraifft uchod fyddai:

Timberlake, Gaga, Presley,

Os yw elfennau'r tabl yn niferoedd yn awk, gall rhedeg cyfrifiadau arnynt fel yn yr enghraifft hon:

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

Heblaw am y newidynnau y mae elfennau mynediad y rhes bresennol ($ 1, $ 2, ac ati) yno y newidydd $ 0 sy'n cyfeirio at y rhes gyflawn (llinell), a'r NF amrywiol sy'n dal i nifer y caeau.

Gallwch hefyd ddiffinio newidynnau newydd fel yn yr enghraifft hon:

awk '{sum = 0; ar gyfer (col = 1; col <= NF; col ++) sum + = $ col; swm argraffu; } '

Mae hyn yn cyfrifo ac yn argraffu swm holl elfennau pob rhes.

Mae datganiadau awk yn aml yn cael eu cyfuno â gorchmynion twyll .